Adapter模式主要意图是将类或接口转换成客户期望的接口,从而使得原本不兼容、无法在一起工作的接口可以在一起工作。该模式有两种形式的Adapter法,一是继承方式;二是对象关联依赖方式。
继承方式Adapter法,相比之下,耦合性更强些,并且毕竟依赖于静态继承,如果被适配的对象有多个(派生)版本的话,则在运行时,将无法做到动态适配,因此,如果想要切换适配对象,就必需要重新编译链接。该方式的类关系参考如下:
就Adapter的目的来说,Adapter对象在使用目的上与被适配的Adaptee对象本质上是没有什么关系的,因此可以说Adapter对象并不是一个Adaptee对象,Adapter对象仅仅只是需要Adaptee对象的相关功能而已(可以直观理解为:借个道,从你这路过而已)。继承方式的Adapter的编码结构参考如下:
1 namespace adapter 2 { 3 class Target 4 { 5 public: 6 virtual void doSomething() {}; 7 // some code here........(like virtual destructor etc.) 8 9 };//class Target 10 11 class Adaptee 12 { 13 public: 14 void doSpecifyWork() { /* some code here........ */ } 15 16 };//class Adaptee 17 18 class Adapter : public Target 19 , private Adaptee 20 { 21 public: 22 virtual void doSomething() override { Adaptee::doSpecifyWork(); } 23 24 }//class Adapter 25 26 }//namespace adapter