桥接模式通过组合而非继承分离抽象与实现:抽象类(如Shape)持有实现接口(如Color)引用,委托具体工作;二者独立扩展,支持运行时动态切换实现,职责清晰、耦合度低。

桥接模式不是靠继承,而是靠“持有引用”来把抽象和实现分开——抽象类里不写具体逻辑,只持有一个实现接口的对象,所有实际工作都委托给它完成。
用组合代替继承
传统方式中,如果图形要支持多种颜色,容易写出 ShapeCircleRed、ShapeCircleBlue、ShapeSquareRed 等一堆子类,一加新形状或新颜色就得补大量类。桥接模式改走组合路线:
- 抽象类(比如 Shape)只定义“画什么”,内部持有一个 Color 类型的引用
- Color 是个接口,定义“怎么上色”,由 Red、Blue 等具体类实现
- Shape 的
draw()方法里不自己画,而是调用color.fill()
两层结构各自独立演化
抽象层和实现层不再绑定在一条继承链上,可以分别扩展:
- 新增图形(如 Triangle):只需继承 Shape,复用已有颜色实现
- 新增颜色(如 Green):只需实现 Color 接口,所有图形自动支持
- 两者互不影响,也不需要生成 3×5=15 个组合类
运行时可动态切换实现
因为抽象类只持有接口类型引用,所以可以在创建对象时或后续任意时刻替换实现:
立即学习“Java免费学习笔记(深入)”;
- 构造
new Circle(new Red()),画出来是红圆 - 运行中调用
circle.setColor(new Blue()),下次 draw 就变蓝圆 - 这种灵活性是继承无法提供的——父类固定,子类无法中途换“血统”
关键在于角色职责清晰划分
桥接模式不是随便拆分,而是按关注点切分:
- Abstraction(如 Shape):负责高层逻辑、业务流程、状态管理
- Implementor(如 Color):专注底层细节、平台差异、硬件适配等“怎么做”
- 它们之间只通过窄接口通信,比如一个
fill()方法,不暴露内部结构


















