Adapter模式

Adapter模式

 
一、意图:
    将一个类的接口转换成客户希望的另一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的类可以一起工作。
二、举例:
    在应用程序中已然设计好了接口,此时使用了第三方库来加快开发,但是我们设计的接口与三方库提供的接口不一致。为了使
接口不兼容的类可以在一起工作,Adapter模式将一个类(三方库)的接口转换为客户希望的接口。
三、模式说明:
    Adapter模式有两种类别:类模式和对象模式。
    类模式采用继承的方式复用类Adaptee的接口,而对象模式采用组合的方式实现类Adaptee的复用。
四、C++示例:

/
****************************** 
对象模式 ***************************/
//adapter.h
#ifndef ADAPTER_H
#define ADAPTER_H

class Target{

public:
    Target();
    virtual ~Target();
    virtual void Request();
};

class Adaptee{      //作为三方库

public:
    Adaptee();
    ~Adaptee();
    virtual void SpecificRequest();
};

class Adapter : public Target{

public:
    Adapter(Adaptee* ada);
    ~Adapter();
    void Request();
private:
    Adaptee* m_ada;
};

#endif // ADAPTER_H

//adapter.cpp
#include "adapter.h"
#include <iostream>

using std::cout;
using std::endl;

Target::Target(){

}

Target::~Target(){

}

void Target::Request(){

    cout << "Target::Request" << endl;
}

Adaptee::Adaptee(){

}

Adaptee::~Adaptee(){

}

void Adaptee::SpecificRequest(){

    cout << "Adaptee::SpecificRequest" << endl;
}

Adapter::Adapter(Adaptee* ada){

    this->m_ada = ada;
}

Adapter::~Adapter(){

}

void Adapter::Request(){

    m_ada->SpecificRequest();
}
//main.cpp
#include "adapter.h"
#include <iostream>

int main(int argc,char* argv[]){

    Adaptee *ada = new Adaptee;
    Target *aT = new Adapter(ada);
    aT->Request();

    return 0;
}
</pre><pre style="margin-top:0px; margin-bottom:0px"><strong><span style="font-size:14px">/</span><span style="font-size:14px; font-family:Arial,Helvetica,sans-serif"></span></strong><pre style="margin-top:0px; margin-bottom:0px; display:inline!important"><span style="font-size:14px">****************************** </span>
类模式 ***************************/
//adapter.h
#ifndef ADAPTER_H
#define ADAPTER_H

class Target{

public:
    Target();
    virtual ~Target();
    virtual void Request();
};

class Adaptee{      //作为三方库

public:
    Adaptee();
    ~Adaptee();
    virtual void SpecificRequest();
};

class Adapter : public Target,private Adaptee{  //私有继承实现组合

public:
    Adapter();
    ~Adapter();
    void Request();
};

#endif // ADAPTER_H

//adapter.cpp
#include "adapter.h"
#include <iostream>

using std::cout;
using std::endl;

Target::Target(){

}

Target::~Target(){

}

void Target::Request(){

    cout << "Target::Request" << endl;
}

Adaptee::Adaptee(){

}

Adaptee::~Adaptee(){

}

void Adaptee::SpecificRequest(){

    cout << "Adaptee::SpecificRequest" << endl;
}

Adapter::Adapter(){

}

Adapter::~Adapter(){

}

void Adapter::Request(){

    this->SpecificRequest();
}

//main.cpp
#include "adapter.h"
#include <iostream>

int main(int argc,char* argv[]){

    Adaptee *ada = new Adaptee;
    Target *aT = new Adapter();
    aT->Request();

    return 0;
}
/*******************************************************End******************************************************/
 
 
五、相关模式:
    Bridge的接口与对象适配器类似,但是Bridge模式的出发点不同:Bridge是将接口部分和实现部分分离,从而对它们可以
较为容易也相对独立的加以改变;而Adapter则意味着改变一个已有对象的接口。
    Decorator模式增强了其他对象的功能同时又不改变它的接口,因此Decorator对应用程序的透明性比适配器好。结果Decorator
支持递归组合,而纯粹使用适配器是不可能实现这一点的。
    Proxy在不改变它的接口的条件下为另一个对象定义了一个代理。


 

                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值