将一个类的接口转换成客户希望的另外一个类的接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。
二,解决的问题
即Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。
三,模式中的角色
1,目标接口(Target):用户所期待的接口,目标可以是具体的类或抽象类。
2,需要适配的类(Original):需要适配的类。
3,适配器(Adapter):通过包装一个需要适配的对象,把原接口转成目标接口。
四,应用举例
常用的适配器模有两种类型,分别是类适配器模式和对象适配器模式。由于类适配器模式通过多重继承来实现,而C#、java等语言都不支持多重继承,因而这里只是介绍对象适配器。原来的Original类提供的接口是specialRequest,而现在用户想使用request接口。我们首先定义一个类Target,在这个类中声明一个虚函数request,这就是用户想要的接口。然后再定义一个Adapter类,这个类继承于Target类,Adapter类有一个数据成员Original
*p = new Original,在Adapter类中重写Target类的request方法。最后在Adapter类的request方法中调用p->specialRequest,这样就完成了从Original::specialRequestt接口到Target::request接口的转换。
下面是具体的代码:
#include <iostream>
using namespace std;
class Original{
public:
void specialRequest(){
cout<<"specialRequest"<<endl;
}
};
class Target{
public:
virtual void request(){}
};
class Adapter : public Target{
private:
Original *p;
public:
Adapter(){
p = new Original;
}
void request(){
p->specialRequest();
}
};
int main() {
Target *p = new Adapter;
p->request();
return 0;
}
输出结果
specialRequest
Process returned 0 (0x0) execution time : 0.046 s
Press any key to continue.
程序分析
从输出结果可以看出,使用Adapter类完成从Original::specialRequestt接口到Target::request接口的转换。