适配器模式

参考:

C++设计模式——适配器模式 | 果冻想  http://www.jellythink.com/archives/108
C++适配器模式_微学苑(编程第一站)   http://www.weixueyuan.net/view/1282.html
 
总结:
  1、  适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。有两种:类适配器和对象适配器。
    在这之前要理解一下接口继承以及实现继承:
          接口继承指的是通过继承,子类获得了父类的接口,而实现继承指的是通过继承子类获得了父类的实现(并不统共接口)。
         在 C++中的 public 继承既是接口继承又是实现继承,因为子类在继承了父类后既可以对外提供父类中的接口操作,又可以获得父类的接口实现。
         当然我们可以通过一定的方式和技术模拟单独的接口继承和实现继承,例如我们可以通过 private 继承获得实现继承的效果(private 继承后,父类中的接口都变为 private,当然只能是实现继承了。),通过纯抽象基类模拟接口继承的效果,但是在 C++中 pure virtual function 也可以提供默认实现,因此这是不纯正的接口继承,但是在 Java 中我们可以 interface 来获得真正的接口继承了。
 
 

2、

 类适配器: 适配器Adapter继承自Target和Adaptee类,Adapter类需要重写Target类的Request函数,在Request中做适当的处理,调用Adaptee类的SepcificRequest。最终,Target实际调用的是Adaptee的SpecificRequest来完成Request的,完成适配。

对象适配器:适配器Adapter类继承自Target类,同时,在Adapter类中有一个Adaptee类型的成员变量;Adapter类重写Request函数时,在Request中,使用Adaptee类型的成员变量调用Adaptee的SpecificRequest函数,最终完成适配。

类适配器有以下特点:

  1. 由于Adapter直接继承自Adaptee类,所以,在Adapter类中可以对Adaptee类的方法进行重定义;
  2. 如果在Adaptee中添加了一个抽象方法,那么Adapter也要进行相应的改动,这样就带来高耦合;
  3. 如果Adaptee还有其它子类,而在Adapter中想调用Adaptee其它子类的方法时,使用类适配器是无法做到的。

对象适配器有以下特点:

  1. 有的时候,你会发现,不是很容易去构造一个Adaptee类型的对象;
  2. 当Adaptee中添加新的抽象方法时,Adapter类不需要做任何调整,也能正确的进行动作;
  3. 可以使用多态的方式在Adapter类中调用Adaptee类子类的方法。
一般还是用对象适配器比较好。
 
3、什么时候使用适配器模式?

   a、使用一个已经存在的类,如果它的接口和你实际要求的不一致时,可以考虑使用适配器模式;

   b、要在调用者和功能提供者双方都不太容易修改的时候再使用适配器模式,而不是一有不同时就使用它。

原文地址:https://www.cnblogs.com/daocaorenblog/p/5358599.html