设计模式之桥接设计模式

  • 简介

    • 与适配器模式类似,桥接设计模式也是结构型模式
    • 将抽象部分与实现部分分离,使它们都可以独立的变化
    • 通俗来说,是通过组合来桥接其它的行为/维度
  • 应用场景举例

    • 传统方式
    • 使用桥接设计模式之后
  • 编码示例

    java 复制代码
    /**
     * 抽象角色:手机
     */
    abstract class Phone {
        /**
         * 通过组合的方式来桥接其他行为
         */
        protected Color color;
    
        public void setColor(Color color) {
            this.color = color;
        }
    
        /**
         * 手机自己的方法
         */
        public abstract void run();
    }
    
    /**
     * 颜色维度
     */
    interface Color {
        void useColor();
    }
    
    /**
     * 具体颜色
     */
    class RedColor implements Color {
    
        @Override
        public void useColor() {
            System.out.println("红色");
        }
    }
    
    /**
     * 具体颜色
     */
    class BlueColor implements Color {
    
        @Override
        public void useColor() {
            System.out.println("蓝色");
        }
    }
    
    /**
     * 手机的实例化:小米手机
     */
    class XiaomiPhone extends Phone {
    
        public XiaomiPhone(Color color) {
            super.setColor(color);
        }
    
        @Override
        public void run() {
            System.out.println("小米手机");
            color.useColor();
        }
    }
    
    /**
     * 手机的实例化:华为手机
     */
    class HuaweiPhone extends Phone {
    
        public HuaweiPhone(Color color) {
            super.setColor(color);
        }
    
        @Override
        public void run() {
            System.out.println("华为手机");
            color.useColor();
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            XiaomiPhone redXmPhone = new XiaomiPhone(new RedColor());
            redXmPhone.run();
            XiaomiPhone blueXmPhone = new XiaomiPhone(new BlueColor());
            blueXmPhone.run();
            HuaweiPhone redHwPhone = new HuaweiPhone(new RedColor());
            redHwPhone.run();
            HuaweiPhone blueHwPhone = new HuaweiPhone(new BlueColor());
            blueHwPhone.run();
    
        }
    }
  • 优点

    • 抽象和实现的分离
    • 优秀的扩展能力,符合开闭原则
  • 缺点

    • 增加系统的理解与设计难度
    • 使用聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程,比如抽象类汽车,里面聚合了颜色类,有点像适配器
  • 总结和对比

    • 按GOF的说法,桥接模式和适配器模式用于设计的不同阶段
      • 桥接模式用于设计的前期,精细化的设计,让系统更加灵活
      • 适配器模式用于设计完成之后,发现类、接口之间无法一起工作,需要进行填坑
    • 适配器模式经常用在第三方API协同工作的场合,在功能集成需求越来越多的今天,这种模式的使用频度越来越高,包括有些同学听过外观设计模式,这个也是某些场景和适配器模式一样
相关推荐
Shadow(⊙o⊙)10 小时前
OTOL设计模式 One Thread One Loop
服务器·网络·设计模式
sarasuki1 天前
如何让LLM 能在半夜偷偷打开网易云呢?
人工智能·设计模式·agent
小王师傅661 天前
【设计模式】装饰模式(四):框架源码实战——从 Java I/O 到 Spring 到 MyBatis
java·设计模式
执明wa1 天前
Android RecyclerView 多类型, 多种 Item
android·xml·开发语言·设计模式·android studio
sarasuki1 天前
如何让 Agent 获取更多的能力?插件 / 技能系统
人工智能·设计模式·agent
sarasuki1 天前
如何让 Agent 安全运行你的命令 :命令分级 + Hook + 读写锁
人工智能·设计模式·agent
Zane19941 天前
技术不难,为什么项目却越改越不敢动?聊聊复杂系统开发该怎么想
设计模式
geovindu1 天前
rust: Factory Method Pattern
开发语言·设计模式·rust·工厂方法模式·创建型模式
一木 之林2 天前
第 8 节 C++ 设计模式在 AI 推理 SDK 和 Agent 工具运行时中如何落地
c++·人工智能·设计模式
Zane19942 天前
MVC 三层架构被打上反模式标签?一次账户扣款需求,讲清楚贫血模型和充血模型该怎么选
设计模式