适配器(Adapter)
意图:
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口
不兼容而不能一起工作的那些类可以一起工作。
种类:
1> 通过类继承
2> 通过对象组合
3> 默认适配器
适用性:
以下情况下使用适配器模式
1)你想使用一个已经存在的类,而它的接口不符合你的需求。
2)你想创建一个可以服用的类,该类可以与其他不相关的类或不可预见的类
(即那些接口可能不一定兼容的类)协同工作。
3)(仅适用于对象Adapter)你想使用一些已经存在的子类,但是不可能对每一
个都进行子类化匹配它们的接口。对象适配它的父类接口。
效果:
类适配器和对象适配器有不同的权衡。类适配器
1)用一个具体的Adapter类对Adaptee和Target进行匹配。
2)使得Adapter可以重定义Adaptee的部分行为,因为Adapter是Adaptee的一个
子类。
3)仅仅引入一个对象,并不需要额外的指针以间接得到adaptee。
对象适配器
1)允许一个Adpater与多个Adaptee--即Adaptee本身以及它的所有子类(如果有子
类的话)--同时工作。Adapter也可以一次给所有的Adaptee添加功能。
2)使得重定义Adaptee的行为比较困难。这就需要生成Adaptee的子类并且使得
Adapter引用这个子类而不是引用Adaptee本身。
实现:
尽管Adapter模式的实现方式通常简单直接,但是仍需要注意以下一些问题:
1)使用C++实现适配器
2)可插入的适配器
对这个窄接口,有以下三个实现途径:
a)使用抽象操作
b)使用代理对象
意图:
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口
不兼容而不能一起工作的那些类可以一起工作。
种类:
1> 通过类继承
2> 通过对象组合
3> 默认适配器
适用性:
以下情况下使用适配器模式
1)你想使用一个已经存在的类,而它的接口不符合你的需求。
2)你想创建一个可以服用的类,该类可以与其他不相关的类或不可预见的类
(即那些接口可能不一定兼容的类)协同工作。
3)(仅适用于对象Adapter)你想使用一些已经存在的子类,但是不可能对每一
个都进行子类化匹配它们的接口。对象适配它的父类接口。
效果:
类适配器和对象适配器有不同的权衡。类适配器
1)用一个具体的Adapter类对Adaptee和Target进行匹配。
2)使得Adapter可以重定义Adaptee的部分行为,因为Adapter是Adaptee的一个
子类。
3)仅仅引入一个对象,并不需要额外的指针以间接得到adaptee。
对象适配器
1)允许一个Adpater与多个Adaptee--即Adaptee本身以及它的所有子类(如果有子
类的话)--同时工作。Adapter也可以一次给所有的Adaptee添加功能。
2)使得重定义Adaptee的行为比较困难。这就需要生成Adaptee的子类并且使得
Adapter引用这个子类而不是引用Adaptee本身。
实现:
尽管Adapter模式的实现方式通常简单直接,但是仍需要注意以下一些问题:
1)使用C++实现适配器
2)可插入的适配器
对这个窄接口,有以下三个实现途径:
a)使用抽象操作
b)使用代理对象
c)参数化适配器