目录
C++设计模式-适配器(Adapter)
一、意图
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
二、适用性
- 你想使用一个已经存在的类,而它的接口不符合你的需求。
- 你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。
- (仅适用于对象Adapter)你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。
三、结构
类适配器使用多重继承对一个接口与另一个接口进行匹配。
对象匹配器依赖于对象组合。
四、参与者
- Target
定义Client使用的与特定领域相关的接口。
- Client
与符合Target接口的对象协同。
- Adaptee
定义一个已经存在的接口,这个接口需要适配。
- Adapter
对Adaptee的接口与Target接口进行适配。
五、代码
cpp
#include<iostream>
using namespace std;
class Target {
public:
virtual void Request() {
cout << "Target::Request" << endl;
}
};
class Adaptee {
public:
void SpecificRequest() {
cout << "Adaptee::SpecificRequest" << endl;
}
};
//Adapter Class
class AdapterClass :public Target, private Adaptee {
public:
virtual void Request() {
cout << "AdapterClass::Request" << endl;
this->SpecificRequest();
}
};
//Adapter Object
class AdapterObject :public Target {
public:
AdapterObject(Adaptee* TempAdaptee) {
this->adaptee = TempAdaptee;
}
virtual void Request() {
cout << "AdapterObject::Request" << endl;
adaptee->SpecificRequest();
}
private:
Adaptee* adaptee;
};
int main() {
//Adapter Class
AdapterClass* adapterClass = new AdapterClass;
adapterClass->Request();
//Adapter Object
Adaptee* adaptee = new Adaptee;
AdapterObject* adapterObject = new AdapterObject(adaptee);
adapterObject->Request();
return 0;
}