一、意图
将一个类的几口转换成客户希望的另外一个借口。Adapter模式使得原先由于借口不兼容而不能一起工作的哪些类可以一起工作。
可以理解为手机的usb数据线,既能充电,又能传输数据。
二、结构图
Adapter模式分为两种:类适配器和对象适配器;
1.类适配器:采用多重继承实现;
2.对象适配器:采用组合实现;
三、组成元素
(1) 目标抽象角色(Target):定义客户所期待要使用的接口,这是一个抽象的设备,主要是形成一种接口规约,满足这种规约的接口的设备都能满足客户。
(2) 源角色(Adaptee):需要被适配的接口,比如手机数据线和电脑电源插头。
(3) 适配器角色(Adapter):用来把源接口转换成符合要求的目标接口的设备,比如电源转换器和插头转换器。
(4) 客户端(Client):使用接口完成操作。
四、实现代码
#include <iostream> using namespace std; //类适配器 class Target { public: virtual void Request()=0; }; class Adaptee { public: void SpecificRequest() { cout<<"SpecificRequest"<<endl; } }; class Adapter:public Target,private Adaptee { public: virtual void Request() { SpecificRequest(); } }; //对象适配器 class ObjTarget { public: virtual void Request()=0; }; class ObjAdaptee { public: void ObjSpecialRequest() { cout<<"ObjSpecialRequest"<<endl; } }; class ObjAdapter:public ObjTarget { private: ObjAdaptee obj_adaptee; public: virtual void Request() { obj_adaptee.ObjSpecialRequest(); } }; void main() { //类适配器 cout<<"Class Adapter"<<endl; Target* p=new Adapter(); p->Request();//实际调用Adaptee::SpecialRequest() //对象适配器 cout<<"Object Adapter"<<endl; ObjTarget*o=new ObjAdapter(); o->Request(); delete p; delete o; }