Adapter模式用于令接口不兼容的类可以一起工作。Adapter本身用于适配这些不兼容的类。
如,现在有一个需求,需要使用标准类接口。而现有类功能可以实现,但是接口并非标准。于是,可以使用一个Adapter,将现有类的接口转换为标准接口,从而使得原本不兼容的类兼容。
1. 目标接口类,即客户需要的接口
class Target
{
public:
virtual void Request(){};//定义标准接口
};
2. 需要适配的现有类
class Adaptee
{
public:
void SpecificRequest(){};
};
3. 适配器
适配器有两种:类模式适配器;对象模式适配器。
无论哪一种,适配器都会代替目标类,并提供目标类的标准接口。
//类模式适配器类,通过public继承获得接口继承的效果,通过private继承获得实现继承的效果
class AdapterC :public Target,private Adaptee
{
public:
virtual void Request()
{
this->SpecificRequest();
};//实现Target定义的Request接口
};
//对象模式适配器类,继承Target类,采用组合的方式实现Adaptee的复用
class AdapterO :public Target
{
public:
AdapterO(Adaptee*adaptee)
{
this->_adaptee =_adaptee;
};
virtual void Request()
{
this->_adaptee->SpecificRequest();
};//实现Target定义的Request接口
private:
Adaptee* _adaptee;
};
4. 用户使用
用户使用时,使用的是适配器类。因为适配器类在上一步中已经具有了目标类的标准接口,所以适配器已经变成了实际的目标类。
void main()
{
//类模式Adapter
Target* pTarget = new AdapterC();
pTarget->Request();
//对象模式Adapter1
Adaptee* ade = new Adaptee();
Target* pTarget1 = new AdapterO(ade);
pTarget1->Request();
//对象模式Adapter2
Target* pTarget2 = new AdapterO();
pTarget2->Request();
}