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

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. 总结

  • 核心价值:通过组合替代继承,解决多维度变化的扩展问题。

  • 关键设计:抽象化类持有实现化接口的引用,通过委托调用实现功能。

  • 适用性:当系统中存在多个独立变化的维度,且需要灵活组合时优先考虑桥接模式。


http://www.kler.cn/a/583071.html

相关文章:

  • 深度学习GRU模型原理
  • Linux——Shell运行原理以及Linux权限
  • 【Linux docker 容器】关于想要让虚拟机在开机时候也docker自己启动,容器也自己启动,省去要自己开docker和容器
  • 已安装 MFC 仍提示“此项目需要 MFC 库”的解决方法 (MSB8041)
  • 骑士74CMS_v3.34.0SE版uniapp全开源小程序怎么编译admin和member流程一篇文章说清楚
  • 【Go语言圣经1.5】
  • 前端对话框项目——调用字节Coze API
  • 18 | 实现简洁架构的 Handler 层
  • python str repr方法区别
  • 数据库原理4
  • 开源链动2+1模式AI智能名片S2B2C商城小程序在KOC参与门店做透中的应用探索
  • 本地部署资源聚合搜索神器 Jackett 并实现外部访问
  • 苹果“被盗设备保护”的取证意义
  • Haproxy配置入门
  • 在芯片设计的后端流程中,通过metal修timing是什么意思,怎么实施。举个timing违例说明一下
  • 详解 C++ 与 C 兼容的接口(如 extern “C“ 函数)
  • 【Academy】SQL 注入 ------ SQL injection
  • [023-01-40].第40节:组件应用 - OpenFeign与 Sentinel 集成实现fallback服务降级
  • Flutter——Android与Flutter混合开发详细教程
  • 学习Android Audio 焦点记录