目录

java设计模式之桥接模式

java设计模式之桥接模式

桥接模式(Bridge Pattern)是一种 结构型设计模式 ,其核心思想是 将抽象(Abstraction)与实现(Implementation)分离,使它们可以独立变化 。通过组合而非继承的方式,桥接模式解决了多层继承带来的类爆炸问题,并提高了系统的扩展性。

1. 核心角色

角色说明
抽象化(Abstraction)定义抽象接口,并持有 实现化对象 的引用。
扩展抽象化(Refined Abstraction)对抽象化的扩展,提供更具体的业务逻辑。
实现化接口(Implementor)定义实现类的接口,供抽象化角色调用。
具体实现化(Concrete Implementor)实现实现化接口的具体类。

2. 应用场景

  • 多维度的独立变化 :当一个类存在多个独立变化的维度,且需要灵活组合时(如手机品牌与手机软件)。
  • 避免类爆炸 :防止因多层继承导致子类数量指数级增长。
  • 运行时动态切换实现 :允许在运行时切换抽象与实现的具体组合。

3. 代码示例:手机品牌与软件功能

假设需要设计一个系统,支持不同品牌手机(华为、苹果)运行不同的软件(相机、通讯录),且手机品牌与软件功能可以独立扩展。

步骤1:定义实现化接口(软件功能) 步骤2:实现具体软件功能 步骤3:定义抽象化类(手机品牌) 步骤4:扩展抽象化(具体手机品牌) 步骤5:客户端调用

4. 桥接模式类图

5. 桥接模式优缺点

优点缺点
解耦抽象与实现,独立扩展维度。增加系统设计复杂度。
避免多层继承,减少子类数量。需正确识别系统中独立变化的维度。
支持运行时动态组合抽象与实现。

6. 桥接模式 vs. 适配器模式

模式目的应用阶段
桥接模式分离抽象与实现,允许独立扩展。系统设计阶段预先规划。
适配器模式解决接口不兼容问题,使类协同工作。系统维护阶段兼容已有代码。

7. 实际应用场景

  1. JDBC 驱动程序

    • 抽象化Connection 接口(如 java.sql.Connection )。
    • 实现化 :不同数据库的驱动实现(如 MySQLConnectionOracleConnection )。
  2. GUI 跨平台框架

    • 抽象化 :窗口组件(如按钮、文本框)。
    • 实现化 :不同操作系统的绘制实现(如Windows、Linux)。
  3. 消息通知系统

    • 抽象化 :消息类型(文本、图片)。
    • 实现化 :发送渠道(短信、邮件、App推送)。

8. 总结

  • 核心价值 :通过组合替代继承,解决多维度变化的扩展问题。
  • 关键设计 :抽象化类持有实现化接口的引用,通过委托调用实现功能。
  • 适用性 :当系统中存在多个独立变化的维度,且需要灵活组合时优先考虑桥接模式。