作用:将一个类的接口转换成客户希望的另一个接口。Adapt模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
UML示意图
1) 采用继承原有接口类的方式
2)采用组合原有接口类的方式
解析:
Adapt模式其实就是把完成同样一个功能但是接口不能兼容的类桥接在一起使之可以在一起工作,这个模式使得复用旧的接口成为可能。
实现:
Adapt模式有两种实现的方法,一种是采用继承原有接口的方法,一种是采用组合原有接口类的方法,这里采用的是第二种实现方法
1) Adapt.h
[cpp] view
plaincopy
plaincopy
- class Target
- {
- public:
- Target(){}
- virtual ~Target(){}
- virtual void Request() = 0;
- };
- // 与被Adapt对象提供不兼容接口的类
- class Adaptee
- {
- public:
- Adaptee(){}
- ~Adaptee(){}
- void SpecialRequest();
- };
- // 进行Adapt的类,采用聚合原有接口类的方式
- class Adapter : public Target
- {
- public:
- Adapter(Adapter* pAdaptee);
- virtual ~Adapter();
- virtual void Request();
- private:
- Adaptee* m_pAdatee;
- };
(2)Adapt.cpp
[cpp] view
plaincopy
plaincopy
- #include "Adapt.h"
- #include <iostream>
- void Adaptee::SpecialRequest()
- {
- std::cout << "SpecialRequest of Adaptee\n";
- }
- void Adapter::Adapter(Adaptee *pAdaptee) : m_pAdaptee(pAdaptee)
- {
- }
- Adapter::~Adapter()
- {
- delete m_pAdaptee;
- m_pAdaptee = NULL;
- }
- void Adapter::Request()
- {
- std::cout << "Request of Adapter\n";
- m_pAdapter->SpecialRequest();
- }
(3)main.cpp
[cpp] view
plaincopy
plaincopy
- #include "Adapter.h"
- #include "stdlib.h"
- int main()
- {
- Adaptee *pAdaptee = new Adaptee;
- Target *pTarget = new Adapter(pAdaptee);
- pTarget->Request();
- delete pTarget;
- system("pause");
- }