将一个类的接口转换成客户希望的另外一个接口。Adapter械使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
组成:
1目标(Target):定义Client使用的接口。
2被适配(Adaptee)角色:这个角色有一个已存在并使用了的接口,而这个接口是需要我们适配的。
3适配器(Adapter)角色:这个适配器模式的核心。它将被适配角色已有的接口转换为目标希望的接口。
在《设计模式》一书中将适配器模式分为类适配器模式和对象适配器模式。区别仅在于适
配器角色对于被适配角色的适配是通过继承完成的还是通过组合来完成的
// 需要被Adapt的类
class Target
{
public:
Target(){}
~Target(){}
virtual void Request() = 0;
};
// 与被Adapt对象提供不兼容接口的类
class Adaptee
{
public:
Adaptee(){}
~Adaptee(){}
void SpecialRequest();
};
// 进行Adapt的类,采用聚合原有接口类的方式
class Adapter
: public Target
{
private:
Adaptee* m_pAdptee;
public:
Adapter(Adaptee* pAdaptee)
: m_pAdptee(pAdaptee)
{
}
virtual ~Adapter()
{
delete m_pAdptee;
m_pAdptee = NULL;
}
virtual void Request()
{
std::cout << "Request of Adapter\n";
m_pAdptee->SpecialRequest();
}
};
void main()
{
Adaptee *pAdaptee = new Adaptee();
Target * pTarget = new Adapter();
pTarget->Request();
delete pAdaptee;
delete PTarget;
}
//感觉这个就是一个抽象基类 我去实现个派生类 来实现那个接口
//派生类里面有个另个类的成员变量 然后通过该接口的实现 去调用另一个类的方法
//为什么不直接在基类中实现呢???不是很懂 慢慢学习中