1.意图
将一个类接口转换成客户希望的另外一个接口。Adapter模式使那些原本不能一起工作的类,可以一起工作。
2.别名
包装器 Wrapper.
3.动机
一个应用可能会有一些类具有不同的接口,并且这些接口互不兼容,可以专门定义一个类,用来适配互不兼容的类。
4.适用性
5.结构
      
6.代码实例
1.对象适配器
class Adaptee
{
public:
    void SpecificRequest();
};
class Target
{
public:
    virtual void Request()=0;
    virtual void Initilaize()=0;
};
#include "Target.h"
#include <memory>
class Adaptee;
class Adapter : public Target
{
public:
    void Request();
    void Initilaize();
    std::shared_ptr<Adaptee> m_pAdaptee;
};
#include <iostream>
#include "Adaptee.h"
void Adaptee::SpecificRequest()
{
    std::cout << "SpecificRequest" << std::endl;
}
#include "Adaptee.h"
#include "Adapter.h"
void Adapter::Request()
{
    m_pAdaptee->SpecificRequest();
}
void Adapter::Initilaize()
{
    m_pAdaptee = std::shared_ptr<Adaptee>(new Adaptee);
}
#include "Adapter.h"
int main()
{
    std::shared_ptr<Adapter> pAdapter(new Adapter);
    std::shared_ptr<Target> pTarget = std::dynamic_pointer_cast<Target>(pAdapter);
    pTarget->Initilaize();
    pTarget->Request();
    while(1);
}
测试结果:
    
2.类适配器
#include "Target.h"
#include "Adaptee.h"
class AdapterClass : public Target,private Adaptee
{
public :
    void Request();
    void Initilaize();
};
以上代码为类适配器,公有继承Target,私有继承Adaptee,即只继承Adaptee的实现,不继承其接口。
#include "AdapterClass.h"
void AdapterClass:: Request()
{
    SpecificRequest();
}
void  AdapterClass::Initilaize()
{
}
以上为类适配器的实现,在Request中调用Adaptee的SpecifiRequest。
#include "Adapter.h"
int main()
{
    std::shared_ptr<Adapter> pAdapter(new Adapter);
    //std::shared_ptr<Target> pTarget = std::dynamic_pointer_cast<Target>(pAdapter);
    //pTarget->Initilaize();
    pAdapter->Request();
    while(1);
}
测试代码,直接调用Adapter的Request从而能够达到目的。
7.效果
类适配器:
对象适配器:
原文:http://www.cnblogs.com/zhengxingpeng/p/6686307.html