【Java】23种设计模式——7.桥接模式

概念

桥接模式 桥接模式,解决扩展带来的爆炸问题。

同一种产品有着不同的配置,就像手机有:运行内存 4 6 8g,存储内存:64 128 256g,芯片:骁龙 A系列 麒麟 联发科 猎户座。不能每一种配置都写一个类就太麻烦了,所以有了桥接模式,可以通过多个类桥接成一个产品类 。

桥接模式角色

角色 职责 示例场景
抽象化(Abstraction‌) 定义抽象接口,持有实现部分的引用 图形抽象类(如 Shape
扩展抽象化(RefinedAbstraction‌ ) 扩展抽象类的功能,调用实现部分的方法 具体形状(如 Circle
实现化接口(Implementor‌) 定义实现部分的抽象接口 颜色渲染接口(如 Color
具体实现类(ConcreteImplementor‌) 实现 Implementor 接口的具体逻辑 具体颜色(如 RedBlue

适用场景

  • 电子产品的不同配置
  • 存在多个独立变化的维度(形状颜色渲染引擎)
  • 需要在运行时动态切换实现方式(如切换数据库驱动)
  • 避免继承导致的类层次结构过于深(跨平台UI组件开发)

使用

现在假设手机有不同的配置,存储内存和芯片。

  • 定义实现化接口(定义内存)

    /**
     * 实现化接口 :内存
     * @Author:lyj
     * @Date:2025/5/5 17:39
     */
    public interface Size {
        String getSize();
    }
    
  • 具体实现 (实现具体内存的大小)

    具体实现,继承实现化接口。设置公共方法的初始化(这里指的是内存初始化)。

    /**
     * 具体实现类 ;64G 内存
     * @Author:lyj
     * @Date:2025/5/5 17:43
     */
    public class M64G implements Size{
        @Override
        public String getSize() {
            return "64G内存";
        }
    }
    /**
     * 具体实现类 : 128G内存
     * @Author:lyj
     * @Date:2025/5/5 17:44
     */
    public class M128G implements Size {
        @Override
        public String getSize() {
            return "128G内存";
        }
    }
    /**
     * 具体实现类 : 256G内存
     * @Author:lyj
     * @Date:2025/5/5 17:45
     */
    public class M256G implements Size{
        @Override
        public String getSize() {
            return "256G内存";
        }
    }
    
  • 定义抽象化角色(手机抽象类)

    /**
     * 抽象化角色 : 手机 (可以自定义存储内存大小)
     * @Author:lyj
     * @Date:2025/5/5 17:37
     */
    public abstract class AbstractPhone {
        // 存储内存。这里为了简单理解,不写芯运行内存
        public Size size;
        public AbstractPhone(Size size)
        {
            this.size = size;
        }
        public abstract String getType();   // 芯片类型
    }
    /**
     * 抽象角色 : 手机(可以自定义芯片类型和存储内存大小)
     * @Author:lyj
     * @Date:2025/5/5 17:54
     */
    public abstract class RefinedAbstractPhone extends AbstractPhone {
        protected RefinedAbstractPhone(Size size) {
            super(size);
        }
        /**
         * 添加尺寸维度获取方式
         * @return
         */
        public String getSize() {
            return size.getSize();
        }
    }
    
  • 扩展抽象化角色 (手机具体的实现类)

    /**
     * 扩展抽象化角色 : HUAWEI手机
     * @Author:lyj
     * @Date:2025/5/5 17:59
     */
    public class HUAWEI1 extends RefinedAbstractPhone {
        /**
         * 构造方法 : 指定具体内存大小
         * @param size
         */
        public HUAWEI1(Size size) {
            super(size);
        }
    
        @Override
        public String getType() {
            return "高通骁龙8 至尊版";
        }
    }
    /**
     * 扩展抽象化角色 : HUAWEI手机
     * @Author:lyj
     * @Date:2025/5/5 17:59
     */
    public class HUAWEI2 extends RefinedAbstractPhone {
        /**
         * 构造方法 : 指定具体内存大小
         * @param size
         */
        public HUAWEI2(Size size) {
            super(size);
        }
    
        @Override
        public String getType() {
            return "华为麒麟9100";
        }
    }
    

    运行测试和显示(以注释方式表示)

    HUAWEI1 huawei1 = new HUAWEI1(new M256G());
    System.out.println(huawei1.getType() + " " + huawei1.getSize());        // 高通骁龙8 至尊版 256G内存
    HUAWEI2 huawei2 = new HUAWEI2(new M128G());
    System.out.println(huawei2.getType() + " " + huawei2.getSize());        // 华为麒麟9100 128G内存
    
posted @ 2025-06-20 15:38  陆陆无为而治者  阅读(21)  评论(0)    收藏  举报