简介
将一个类的接口转换成客户希望的另外一个接口
UML
优点
可以将不符合要求的接口转换为需要的接口。
缺点
多了个适配器类出来
代码
能用组合实现的一般不推荐使用继承,所以代码中类模式轻易不要用
#include <iostream>
using namespace std;
class ITarget
{
public:
virtual void request() = 0;
};
class Adaptee
{
public:
void SpecificRequest(){ }
};
//对象模式,适配器类,继承Target类,采用组合的方式实现Adaptee的复用
class Adapter : public ITarget
{
public:
explicit Adapter(Adaptee *src):m_adaptee(src){}
void request() {
m_adaptee->SpecificRequest();
}
private:
Adaptee *m_adaptee;
};
//类模式,适配器类,通过public继承获得接口继承的效果,通过private继承获得实现继承的效果
class Adapter1 : public ITarget,private Adaptee /**< 私有继承后,老类的所有对外接口都不再暴露了。 */
{
public:
void request(){
this->SpecificRequest();
}
};
int main()
{
Adaptee oldObj;
ITarget *p = new Adapter(&oldObj);
p->request();
ITarget *p1 = new Adapter1 ();
p1->request();
}