一句话意图:把抽象部分与其实现部分分离,使二者可以独立地变化,用组合代替继承层级的爆炸。
适用场景
- 一个类存在两个(或多个)维度的变化,用继承会产生 m×n 个子类。
- 想避免抽象与实现被编译期绑定,希望在运行时切换实现。
- 典型二维:图形 × 系统、消息类型 × 发送渠道、语句类型 × 数据库方言。
结构与角色
| 角色 | 职责 |
|---|---|
Abstraction |
抽象层,持有 Implementor 引用,提供高层操作 |
RefinedAbstraction |
扩展抽象,调用实现层完成业务 |
Implementor |
实现层接口,定义底层行为 |
ConcreteImplementor |
实现层的具体实现 |
2026/10/11大约 3 分钟