首页 > 其他 > 详细

Adapter(适配器)-类对象结构型模式

时间:2017-04-09 21:01:01      阅读:225      评论:0      收藏:0      [点我收藏+]

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.效果

类适配器:

  • 用一个具体的Adapter类对Adaptee和Target进行匹配。结果是当我们想要匹配一个类以及所有它的子类时,类Adapter将不能工作。
  • 使得Adapter可以重定义Adaptee的部分行为,因为Adapter是Adaptee的一个子类。
  • 仅仅引入了一个对象,并不需要额外的指针以间接得到Adaptee.

 

对象适配器:

  • 允许一个Adapter同时与多个Adaptee同时工作。
  • 使得重定义Adaptee的行为比较困难。

Adapter(适配器)-类对象结构型模式

原文:http://www.cnblogs.com/zhengxingpeng/p/6686307.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!