设计模式的解析和实现(C++)之六-Adapt模式

[摘要]  将一个类的接口转换成客户希望的另外一个接口。Adapt 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

作用:

将一个类的接口转换成客户希望的另外一个接口。Adapt 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

UML示意图

1)采用继承原有接口类的方式

2)采用组合原有接口类的方式

解析:

Adapt模式其实就是把完成同样的一个功能但是接口不能兼容的类桥接在一起使之可以在一起工作,这个模式使得复用旧的接口成为可能。

实现:

Adapt模式有两种实现办法,一种是采用继承原有接口类的方法,一种是采用组合原有接口类的方法,这里采用的是第二种实现方法。

1)Adapt.h

/**//********************************************************************

created:    2006/07/20

filename:     Adapter.h

author:        李创

http://www.cppblog.com/converse/

purpose:    Adapter模式的演示代码

*********************************************************************/

#ifndef ADAPTER_H

#define ADAPTER_H

// 需要被Adapt的类

class Target

{

public:

Target(){}

virtual ~Target() {}

virtual void Request() = 0;

};

// 与被Adapt对象提供不兼容接口的类

class Adaptee

{

public:

Adaptee(){}

~Adaptee(){}

void SpecialRequest();

};

// 进行Adapt的类,采用聚合原有接口类的方式

class Adapter

: public Target

{

public:

Adapter(Adaptee* pAdaptee);

virtual ~Adapter();

virtual void Request();

private:

Adaptee* m_pAdptee;

};

#endif

2)Adapt.cpp

/**//********************************************************************

created:    2006/07/20

filename:     Adapter.cpp

author:        李创

http://www.cppblog.com/converse/

purpose:    Adapter模式的演示代码

*********************************************************************/

#include "Adapter.h"

#include

void Adaptee::SpecialRequest()

{

std::cout << "SpecialRequest of Adapteen";

}

Adapter::Adapter(Adaptee* pAdaptee)

: m_pAdptee(pAdaptee)

{

}

Adapter::~Adapter()

{

delete m_pAdptee;

m_pAdptee = NULL;

}

void Adapter::Request()

{

std::cout << "Request of Adaptern";

m_pAdptee->SpecialRequest();

}

3)Main.cpp

/**//********************************************************************

created:    2006/07/20

filename:     Main.cpp

author:        李创

http://www.cppblog.com/converse/

purpose:    Adapter模式的测试代码

*********************************************************************/

#include "Adapter.h"

#include

int main()

{

Adaptee *pAdaptee = new Adaptee;

Target *pTarget = new Adapter(pAdaptee);

pTarget->Request();

delete pTarget;

system("pause");

return 0;

}




免责声明:

本站系本网编辑转载,会尽可能注明出处,但不排除无法注明来源的情况,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与本网联系, 来信: liujun@soft6.com 我们将在收到邮件后第一时间删除内容!

[声明]本站文章版权归原作者所有,内容为作者个人观点,不代表本网站的观点和对其真实性负责,本站拥有对此声明的最终解释权。