当前位置: 首页 > article >正文

设计模式(七)桥接模式详解

设计模式(七)桥接模式详解

桥接模式简介

  • 定义:桥接模式是一种结构型设计模式,它将抽象部分与实现部分分离,使得它们可以独立变化。又被称之为柄体模式和接口模式。通过将抽象部分和实现部分解耦,桥接模式可以减少类的数量并提高系统的灵活性。

  • 主要用途:当类存在多个维度的变化时,可以使用桥接模式将这些变化分离,从而使各个维度可以独立变化。

桥接模式的关键组件

  1. Abstraction(抽象部分):定义了抽象部分的接口,并持有一个对实现部分的引用。

  2. RefinedAbstraction(扩展抽象部分):扩展了抽象部分,提供了更具体的实现。

  3. Implementor(实现部分接口):定义了实现部分的接口,具体实现类需要实现这个接口。

  4. ConcreteImplementor(具体实现部分):实现了实现部分接口,提供了具体的实现。

// 品牌接口
package com.briup.patterns_design.bridge;

/**
 * @author 35329
 * 品牌
 */
public interface Brand {
    void info();
}
// 联想品牌类
package com.briup.patterns_design.bridge;

/**
 * @author 35329
 * 联想品牌
 */
public class Lenovo implements Brand{
    @Override
    public void info() {
        System.out.print("联想");
    }
}
// 苹果品牌类
package com.briup.patterns_design.bridge;

/**
 * @author 35329
 * 苹果品牌
 */
public class Apple implements Brand{
    @Override
    public void info() {
        System.out.print("苹果");
    }
}
// 抽象的电脑类型类
package com.briup.patterns_design.bridge;

/**
 * @author 35329
 * 抽象的电脑类型类
 */
public abstract class Computer {
    // 组合,品牌 桥
    protected Brand brand;

    public Computer(Brand brand) {
        this.brand = brand;
    }

    public void info(){
        // 自带品牌
        brand.info();
   }
}

class Desktop extends Computer{

    public Desktop(Brand brand) {
        super(brand);
    }

    @Override
    public void info() {
        super.info();
        System.out.println("台式机");
    }
}
class Laptop extends Computer{

    public Laptop(Brand brand) {
        super(brand);
    }

    @Override
    public void info() {
        super.info();
        System.out.println("笔记本");
    }
}
// 测试类
package com.briup.patterns_design.bridge;

/**
 * @author 35329
 */
public class Test {
    public static void main(String[] args) {
        // 苹果笔记本
        Computer computer = new Laptop(new Apple());
        computer.info();
        // 联想台式机
        Computer computer2 = new Desktop(new Lenovo());
        computer2.info();
    }
}

bdd1991989f140ba957b3b33ee17b7b7.png

好处分析:

  • 桥接模式偶尔类似于多继承方案,但是多继承方案违背了类的单一职责原则,复用性比较差,类的个数也非常多,桥接模式是比多继承方案更好的解决方法。极大地减少了子类的个数,从而降低管理和维护的成本。

  • 桥接模式提高了系统的可扩充性,在两个变化维度中任意扩展一个维度,都不需要修改原有系统。符合开闭原则,就像一座桥,可以把两个维度连接起来。

劣势分析:

  • 桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。

  • 桥接模式要求正确识别出系统中两个独立变化的维度,因此其使用范围具有一定的局限性。

最佳实践:

  • 如果一个系统需要在构建的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象层建立一个关联关系。抽象化角色和实现化角色可以以继承的方式独立扩展而互不影响,在程序运行时可以动态将一个抽象化子类的对象和一个实现化子类的对象进行组合,即系统需要对抽象化角色和实现化角色进行动态耦合。

  • 一个类存在两个独立变化的维度,且这两个维度都需要进行扩展。

  • 虽然在系统中使用继承是没有问题的,但是由于抽象化角色和具体化角色需要独立变化,设计要求需要独立管理这两者。对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统, 桥接模式尤为适用。

场景:

  • Java语言通过Java虚拟机实现了平台的无关性。

  • AWT中的Peer架构

  • JDBC驱动程序也是桥接模式的应用之一。

 


http://www.kler.cn/news/365696.html

相关文章:

  • taro底部导航,Tabbar
  • 【Android】Convenient ADB Commands
  • 互联网系统的微观与宏观架构
  • opencv学习笔记(3):图像和视频的读取(C++)
  • 微信小程序性能优化 ==== 合理使用 setData 纯数据字段
  • qt QLineEdit详解
  • Linux之实战命令53:mtr应用实例(八十七)
  • 将获取的数据存储到Excel文件中
  • 动态规划之子数组系列(下)
  • 分行或者分列计算数组中各元素的累积numpy.cumproduct()
  • vue中标签的ref和id的用法和区别优缺点
  • UE5蓝图中忽略触发区域进行碰撞
  • 【Java】输入十个整数,从小到大输出
  • ATom:2016-2018 年来自 CAPS 仪器的云和粗气溶胶测量数据
  • 【C++篇】栈的层叠与队列的流动:在 STL 的韵律中探寻数据结构的优雅之舞
  • 深度学习技术演进:从 CNN、RNN 到 Transformer 的发展与原理解析
  • input标签v-model属性失效
  • softmax回归从零实现
  • 怎么压缩ppt大小?压缩PPT文件非常简单的几种方法
  • Python 语法与数据类型详解
  • 易泊车牌识别相机在智慧工地的应用
  • 中间件之Seata
  • 中小企业设备管理效率提升:Spring Boot系统设计
  • 铜业机器人剥片 - SNK施努卡
  • git 修改当前分支的上游分支
  • A survey on instance segmentation: state of the art——论文笔记