? ? 将一个类的接口转换成客户希望的另外一个接口。
? ? 适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
? ? 目标(Target)、被适配者(Adaptee)、适配器(Adapter)
? ? 3.1 类适配器
? ? ? a. Adapter可以重定义Adaptee的部分行为,因为Adapter是它的一个子类。
? ? ? b. 仅仅引入了一个对象,不需要额外的指针得到Adaptee。
? ? 3.2 对象适配器?
? ? ? a. 允许一个Adapter与多个Adaptee(其本身及它的所有子类)。
? ? 4.1 类适配器
? ? ? ?a.?一个Adapter只能对应一个Adaptee(不能适配其子类)。
? ? 4.2?对象适配器?
? ? ? ?a.?Adapter需要额外的指针得到Adaptee。
? ? ? ?b.?重定义Adaptee的行为比较困难,需要生成Adaptee子类使得Adapter引用这个子类。
? ? 5.1?Adapter是改变一个已有对象的接口,而Bridge是将接口和实现分离。
? ? 5.2?Decorator是增强其他对象的功能,但不改变它的接口,且支持递归组合。而Adapter不行。
? ? 5.3?Proxy在不改变它的接口的条件下,为另一个对象定义了一个代理。
#pragma once
#include <iostream>
using namespace std;
class Target
{
public:
virtual void Request()
{
cout << "Target普通的请求" << endl;
}
};
class Adaptee
{
public:
virtual void SpecificalRequest()
{
cout << "Adaptee特殊请求" << endl;
}
};
class ClassAdapter : public Target, public Adaptee
{
public:
virtual void Request()
{
SpecificalRequest();
Target::Request();
}
};
class ObjectAdapter : public Target
{
private:
Adaptee* m_pAdaptee;
public:
virtual void Request()
{
m_pAdaptee->SpecificalRequest();
Target::Request();
}
ObjectAdapter()
{
m_pAdaptee = new Adaptee();
}
~ObjectAdapter()
{
delete m_pAdaptee;
}
};
#include "Target.h"
int main() {
ClassAdapter* pClassAdapter = new ClassAdapter;
pClassAdapter->Request();
ObjectAdapter* pObjectAdapter = new ObjectAdapter;
pObjectAdapter->Request();
delete pClassAdapter;
delete pObjectAdapter;
return 0;
}
运行结果:
6.1 类适配器ClassAdapter可以重新实现SpecificalRequest(3.1.a)
6.2 对象适配器ObjectAdapter不需要修改代码,就可以对Adaptee的子类同样适配(3.2.a)