桥接模式通过组合而非继承分离抽象与实现:抽象类(如shape)仅定义高层语义并持implementor引用,委托具体操作;实现类(如reddrawapi)独立实现接口,新增图形或渲染方式互不影响,支持运行时切换。

在桥接模式中,抽象类不直接实现具体逻辑,而是通过组合持有实现类的引用,把行为委托给实现层——这才是“分离”的关键动作。
抽象类作为桥接中的 Abstraction 角色
抽象类(如 Shape)只定义高层业务语义(比如 draw()),不关心“怎么画”,只负责调用实现层接口。它内部持有一个 Implementor 类型的引用(通常是接口或抽象实现类),所有具体操作都转发过去。
- 构造时注入实现对象(依赖注入),而非硬编码或继承具体实现
- 方法体里不做具体绘制、支付、日志写入等细节,只做协调和流程控制
- 可派生出扩展抽象类(如 Circle、Rectangle),但它们仍只扩展“是什么”,不碰“怎么做”
实现类完全独立于抽象类体系
实现类(如 RedDrawAPI、BlueDrawAPI)只实现 DrawAPI 接口,与 Shape 及其子类无继承关系,也不需要知道上层是圆还是矩形。
- 新增一种颜色?只需新增一个
ConcreteImplementor,无需修改任何抽象类 - 新增一种图形?只需新增一个
RefinedAbstraction,不影响已有颜色实现 - 运行时切换实现?只需替换抽象类持有的实现对象引用(例如从
new RedDrawAPI()换成new BlueDrawAPI())
抽象类与实现类之间是组合,不是继承
这是区别于传统继承的关键。抽象类里没有 extends ConcreteDrawAPI,只有类似 private DrawAPI drawAPI; 的字段声明,以及在构造或 setter 中赋值。
- 避免了“形状 × 颜色 = N×M 个子类”的爆炸式增长
- 抽象变化(加新图形)和实现变化(加新渲染方式)互不干扰
- 抽象类可以面向接口编程,对实现细节完全透明
典型结构示意(Java)
抽象层:
Abstraction:Shape(含 DrawAPI drawAPI 字段)
RefinedAbstraction:Circle、Rectangle(调用 drawAPI.drawShape(...))
实现层:
Implementor:DrawAPI(接口)
ConcreteImplementor:RedDrawAPI、BlueDrawAPI(各自实现 drawShape)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











