作用:
将一个类的接口转换成客户希望的另外一个接口。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
#defineADAPTER_H
//需要被Adapt的类
classTarget
{
public:
Target(){}
virtual~Target(){}
virtualvoidRequest()=0;
};
//与被Adapt对象提供不兼容接口的类
classAdaptee
{
public:
Adaptee(){}
~Adaptee(){}
voidSpecialRequest();
};
//进行Adapt的类,采用聚合原有接口类的方式
classAdapter
:publicTarget
{
public:
Adapter(AdapteepAdaptee);
virtual~Adapter();
virtualvoidRequest();
private:
Adapteem_pAdptee;
};
#endif
2)Adapt.cpp
/*********
created: 2006/07/20
filename: Adapter.cpp
author: 李创
http://www.cppblog.com/converse/
purpose: Adapter模式的演示代码
*********/
#include"Adapter.h"
#include<iostream>
voidAdaptee::SpecialRequest()
{
std::cout<<"SpecialRequest of Adaptee\n";
}
Adapter::Adapter(AdapteepAdaptee)
: m_pAdptee(pAdaptee)
{
}
Adapter::~Adapter()
{
delete m_pAdptee;
m_pAdptee=NULL;
}
voidAdapter::Request()
{
std::cout<<"Request of Adapter\n";
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<stdlib.h>
intmain()
{
AdapteepAdaptee=newAdaptee;
TargetpTarget=newAdapter(pAdaptee);
pTarget->Request();
delete pTarget;
system("pause");
return0;
}
原文链接: https://www.cnblogs.com/weiqubo/archive/2011/01/09/1931462.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/19860
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!