结构型模式 Adapter模式(适配器模式)
一. 意图
将一个类的接口转换成客户希望的另外一个接口. Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作
二. 适用性
2.1 你想使用一个已经存在的类,而它的接口不符合你的需求。.
2.2 你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作.
2.3 (仅适用于对象Adapter)你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口.
三. 模式结构
有两种实现方式分别是通过多重继承和对象组合的方式.
图1 多重继承实现方式
图2 对象组合方式实现
四. 角色说明
Target: 定义Client使用的与特定领域相关的接口.
Adaptee: 一个已经存在和实现的接口, 这个接口需要适配.
Adapter: 对Adaptee的接口与Target接口进行适配
五. 使用
Client只调用Target接口, 为了能使用上Adaptee上的功能, 在Adaptee和Target之间增加一个适配Adapter来满足Target接口的调用.
六. 我的理解
6.1 该模式也很好理解: 就是Client只使用Request接口, 现在增加需求, 而Adaptee可以满足这种需求实现, 但是接口并不满足Client的调用, 故增加一个中间层Adapter(就好像一个连接器一样, 或者叫转换器, 或者叫适配器).
6.2 Adapter中的Request实现调用了Adaptee中的方法. 怎样使得Adapter可以调用Adaptee中的方法? 使用继承或者组合的方式即可.
6.3 使用C++实现适配器类在使用C++实现适配器类时, Adapter类应该采用公共方式继承Target类, 并且用私有方式继承Adaptee类.
七. 相关模式
7.1 Bridge模式的结构与对象适配器类似, 但是Bridge模式的出发点不同:Bridge目的是将接口部分和实现部分分离, 从而对它们可以较为容易也相对独立的加以改变. 而Adapter则意味着改变一个已有对象的接口.
7.2 Decorator模式增强了其他对象的功能而同时又不改变它的接口. 因此decorator对应用程序的透明性比适配器要好。结果是decorator支持递归组合, 而纯粹使用适配器是不可能实现这一点的。
7.3 Proxy模式在不改变它的接口的条件下, 为另一个对象定义了一个代理.