java设计模式之桥接模式
桥接模式(Bridge Pattern)是一种 结构型设计模式,其核心思想是 将抽象(Abstraction)与实现(Implementation)分离,使它们可以独立变化。通过组合而非继承的方式,桥接模式解决了多层继承带来的类爆炸问题,并提高了系统的扩展性。
1. 核心角色
角色 | 说明 |
---|---|
抽象化(Abstraction) | 定义抽象接口,并持有 实现化对象 的引用。 |
扩展抽象化(Refined Abstraction) | 对抽象化的扩展,提供更具体的业务逻辑。 |
实现化接口(Implementor) | 定义实现类的接口,供抽象化角色调用。 |
具体实现化(Concrete Implementor) | 实现实现化接口的具体类。 |
2. 应用场景
-
多维度的独立变化:当一个类存在多个独立变化的维度,且需要灵活组合时(如手机品牌与手机软件)。
-
避免类爆炸:防止因多层继承导致子类数量指数级增长。
-
运行时动态切换实现:允许在运行时切换抽象与实现的具体组合。
3. 代码示例:手机品牌与软件功能
假设需要设计一个系统,支持不同品牌手机(华为、苹果)运行不同的软件(相机、通讯录),且手机品牌与软件功能可以独立扩展。
步骤1:定义实现化接口(软件功能)
步骤2:实现具体软件功能
步骤3:定义抽象化类(手机品牌)
步骤4:扩展抽象化(具体手机品牌)
步骤5:客户端调用
4. 桥接模式类图
5. 桥接模式优缺点
优点 | 缺点 |
---|---|
解耦抽象与实现,独立扩展维度。 | 增加系统设计复杂度。 |
避免多层继承,减少子类数量。 | 需正确识别系统中独立变化的维度。 |
支持运行时动态组合抽象与实现。 |
6. 桥接模式 vs. 适配器模式
模式 | 目的 | 应用阶段 |
---|---|---|
桥接模式 | 分离抽象与实现,允许独立扩展。 | 系统设计阶段预先规划。 |
适配器模式 | 解决接口不兼容问题,使类协同工作。 | 系统维护阶段兼容已有代码。 |
7. 实际应用场景
-
JDBC 驱动程序
-
抽象化:
Connection
接口(如java.sql.Connection
)。 -
实现化:不同数据库的驱动实现(如
MySQLConnection
、OracleConnection
)。
-
-
GUI 跨平台框架
-
抽象化:窗口组件(如按钮、文本框)。
-
实现化:不同操作系统的绘制实现(如Windows、Linux)。
-
-
消息通知系统
-
抽象化:消息类型(文本、图片)。
-
实现化:发送渠道(短信、邮件、App推送)。
-
8. 总结
-
核心价值:通过组合替代继承,解决多维度变化的扩展问题。
-
关键设计:抽象化类持有实现化接口的引用,通过委托调用实现功能。
-
适用性:当系统中存在多个独立变化的维度,且需要灵活组合时优先考虑桥接模式。