意图:将一组实现与另一组使用它们的对象分离。
问题:一个抽象类的派生类必须使用多个实现,但不能出现类数量爆炸性增长。
解决方案:为所有实现定义一个接口,供抽象类的所有派生类使用。
参与者与协作者:Abstraction为要实现的对象定义接口,Implementor为具体的实现类定义接口。Abstraction的派生类使用Implementor的派生类,却无需知道自己具体使用哪一个ConcreteImplementor。
效果:实现与使用的对象解耦,提供了可扩展性,客户对象无需操心实现问题。
实现:
1. 将实现封装在一个抽象类中。
2. 在要实现的抽象的基类中包含一个实现的句柄。
结构图:
> 遵循“一条规则,实现一次”策略有助于重构。
> 找到变化关封装之。
> 优先使用对象聚集而不是类继承。
摘自《设计模式解析》(第2版)第10章
Tags: 设计模式