主旋律
处理类或对象的组合
Adapter 适配器
意图
将一个类的接口转换为客户希望的另外一个接口 可以使得接口不兼容不能一起工作的类可以一起工作
结构图 分两种
一种类适配器 一种对象适配器
协作
Client在Adapter实例上调用一些操作 接着适配器调用Adaptee的操作试下这个请求
适用性
- 你想使用一个已经存在的类 但是他的接口不符合我们的要求
- 创建一个可复用的类 该类可以与其他不相关的类或不可预见的类(即接口可能不一定兼容的类)协同工作
- 想使用已经存在的子类 但是又方便对每一个子类都适配去匹配他们的接口 这时
对象适配器
可以对父类适配
问题
- 重定义adaptee的行为比较困难
- 使用适配器的一个潜在问题是 他们不对所以的客户都透明
实现
- c++通常 public继承Target private继承adaptee
- 可插入的适配器
需要找到adaptee的窄接口 用于适配的最小的操作集 对于窄接口通常有以下三种方法
2.1 抽象(感觉类似于将窄接口的操作当做工厂方法)
2.2 使用代理对象(类似组合一个父类指针然后多态)
2.3 使用参数化的适配器
相关模式
- Bridge模式的出发点不同 Bridge模式的目的是将接口的部分和实现分离 从而可以更加独立的改变对象
而Adapter意味着改变一个已有对象的接口 - Decorator模式增加了其他对象的功能又不改变他们的接口 并且Decorator支持递归哈哈
- Proxy模式在不改变接口的情况下 定义了另一个对象的代理
Bridge 桥接
意图
将抽象部分与他的实现部分分离 使他们都可以独立变化