适配器它是主要作用是将一个类的接口转换成客户希望的另外一个接口这样使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
适配器模式有两种:1.类的适配器 2.对象适配器,对象适配器更多一些。
#includeusing namespace std; //目标接口 class CTarget { public: CTarget() {} virtual ~CTarget() {} virtual void Request() = 0; }; //现存类 class CAdeptee { public: CAdeptee() {} ~CAdeptee() {} //执行请求任务 void SpecificalRequest() { cout << "原始类方法被调用" << endl; } }; //类模式:适配器类 class CAdapter :public CTarget { public: CAdapter() { pAdeptee = new CAdeptee(); } ~CAdapter() { delete pAdeptee; }; //目标接口,将实际接口和目标接口的差异进行封装 virtual void Request() { cout << "类模式适配器:"; pAdeptee->SpecificalRequest(); } private: CAdeptee* pAdeptee; }; //对象模式,适配器类,继承CTarget类,采用组合的方式实现Adaptee的复用 class CAdapter1 :public CTarget { public: CAdapter1(CAdeptee* adaptee) { m_Adaptee = new CAdeptee(); } CAdapter1() {} ~CAdapter1() { if (m_Adaptee != NULL) { delete m_Adaptee; } } //实现Target定义的Request接口 void Request() { cout << "对象模式模式适配器:"; m_Adaptee->SpecificalRequest(); } private: CAdeptee* m_Adaptee; }; int main() { //以多态的方式,目标类对象指针接收派生的适配器类对象 CTarget* pTarget = new CAdapter(); pTarget->Request(); CTarget* pTarget1 = new CAdapter1(); pTarget1->Request(); delete pTarget; delete pTarget1; return 0; }
类模式适配器:原始类方法被调用 对象模式模式适配器:原始类方法被调用
(1) 将目标类和适配者类解耦,通过引入一个适配器类来重用现有的适配者类,无须修改原有结构。
(2) 增加了类的透明性和复用性,将具体的业务实现过程封装在适配者类中,对于客户端类而言是透明的,而且提高了适配者的复用性,同一个适配者类可以在多个不同的系统中复用