1. 意图
将抽象部分和实现部分分离, 使它们可以独立地变化.
2. 适用场景
- 不希望在抽象与它的实现部分之间有固定的绑定关系. 在程序运行时实现部分可以被选择与切换.
- 类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充.
- 对抽象的实现部分的修改不应该影响客户
3. 实现
3.1. 参与者
- Abstraction
定义抽象类的接口 - RefinedAbstraction
扩充由 Abstraction 定义的接口 - Implementor
定义实现类的接口 - ConcreteImplementor
实现 Implementor
将抽象与实现分离, 为用户提供一个稳定的接口.
3.2. 结构
3.3. 开发规范
- Abstraction 与 Implementor 之间应该是一对一的关系