意图:使控制范围之外的一个原有对象与某个接口匹配。
问题:系统的数据和行为都正确,但接口不符。通常用于必须从抽象类派生时。
解决方案:Adapter模式提供了具有所需接口的包装类。
参与者与协作者:Adapter改变了Adaptee的接口,使Adaptee与Adapter的基类Target匹配。这样Client就可以使用Adaptee了,好象它是Target类型。
效果:Adapter模式使原有对象能够适应新的类结构,不受其接口的限制。
实现:将原有类包含在另一个类之中。让包含类与需要的接口匹配,调用被包容类的方法。
结构图:
Facade模式与Adapter模式的比较:
1. 是否存在既有的类?Facade(是)、Adapter(是)
2. 是否必须按某个接口设计?Facade(否)、Adapter(是)
3. 对象需要多态行为吗?Facade(否)、Adapter(可能)
4. 需要更简单的接口吗?Facade(是)、Adapter(否)
结论:Facade模式简化了接口,而Adapter模式则将一个已有的接口转换成另一个接口。
摘自《设计模式解析》(第2版)第7章
Tags: 设计模式