设计模式 结构型模式 适配器模式
适配器模式
以前写过一个例子, 通过 Adapter 适配 Target 和 Adaptee.
一般 Target 是需求,Adaptee 是需要兼容 Target 的旧部分.
再具体点:
大型的项目里,某个地方就是调用 Target 的 sendData,这个地方不能改;但其功能 Adaptee 的 sendCommandData 可以满足,只是调用不满足;于是用 Target 的派生类作为 Adapter 来包装 Adaptee,封装 sendCommandData 的调用.
#include <iostream>
using namespace std;
class Target {
public:
virtual int sendData(const char* data) = 0;
virtual ~Target(){}
};
class Adaptee {
public:
int sendCommandData(const char* cmd, const char* data){
cout << "cmd = " << cmd << endl;
cout << "data = " << data << endl;
return 0;
}
};
class Adapter : public Target {
public:
Adapter(Adaptee* t):tee(t) {}
//适配Adaptee里的SendCommandData
int sendData(const char* data) {
return tee->sendCommandData("default",data);
}
private:
Adaptee* tee;
};
int main(int argc, char* argv[])
{
//Adapter封装Adaptee,具有和Target一致的接口,但是功能确不同了.
//间接使用了Adaptee的不同的方法
Target* target = new Adapter(new Adaptee());
//该target对象在初始阶段,就要考虑到可能适配新的接口.
target->sendData("Adapter mode is running");
return 0 ;
}
还有一些扩展的模式,如双向适配器模式
,Target 和 Adaptee 之间互相适应.