设计模式C++描述----06.适配器(Adapter)模式
一. 定义
适配器模式将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
Adapter 模式的两种类别:类模式和对象模式。
二. 举例说明
实际中,我们为了完成某项工作购买了一个第三方的库来加快开发。这个库可能都是一些.dll文件,这就带来了一个问题!我们在应用程序中已经设计好
了接口,与这个第三方提供的接口不一致,为了使得这些接口不兼容的类(不能在一起工作)可以在一起工作了,Adapter模式提供了将一个类(第三方库)
的接口转化为客户(购买使用者)希望的接口的方法。
三. 代码实现
类模式的Adapter采用继承的方式复用Adaptee的接口。

- //目标类,可以想像成客户所期代的接口
- class Target
- {
- public:
- Target()
- {
- }
- virtual ~Target()
- {
- }
- virtual void Request()
- {
- std::cout<<"Target::Request"<<std::endl;
- }
- };
- //被适应者,可以看成 dll 提供的接口
- class Adaptee
- {
- public:
- Adaptee()
- {
- }
- virtual ~Adaptee()
- {
- }
- void SpecificRequest()
- {
- std::cout<<"Adaptee::SpecificRequest"<<std::endl;
- }
- };
- //适配器类,通过在内部包装被适应者对象 adaptee
- //把源接口(SpecificRequest)转换成目标接口(Request)
- class Adapter: public Target, private Adaptee
- {
- public:
- void Request()
- {
- this->SpecificRequest();
- }
- };
- //测试代码
- int main(int argc,char* argv[])
- {
- Adaptee* ade = new Adaptee;
- Target* adt = new Adapter;
- adt->Request();
- return 0;
- }
对象模式的Adapter中则采用组合的方式实现Adaptee的复用。

- //目标类
- class Target
- {
- public:
- virtual ~Target() {}
- virtual void Request()
- {
- std::cout<<"Target::Request"<<std::endl;
- }
- };
- //被适应类
- class Adaptee
- {
- public:
- virtual ~Adaptee() {}
- void SpecificRequest()
- {
- std::cout<<"Adaptee::SpecificRequest"<<std::endl;
- }
- };
- //适配器类,用于转接两者的接口
- class Adapter:public Target
- {
- public:
- Adapter(Adaptee* ade)
- {
- this->_ade= ade;
- }
- void Request()
- {
- _ade->SpecificRequest();
- }
- private:
- Adaptee* _ade;
- };
- //测试代码
- int main(int argc,char* argv[])
- {
- Adaptee* ade = new Adaptee;
- Target* adt = new Adapter(ade);
- adt->Request();
- return 0;
- }
四. 说明
1. 当接口不同时,首先不应该考虑用适配器,而是应该考虑通过重构统一接口。
2. 使用适配器模式是无奈之举,通常在软件开发后期或维护期再考虑使用。
设计模式C++描述----06.适配器(Adapter)模式的更多相关文章
- 设计模式--适配器(Adapter)模式
今天学习另一个设计模式,适配器(Adapter)模式,这是一个共同方向,但有特殊要求,就应用到此设计模式.写到这里,想起很久以前,有写过一篇<ASP.NET的适配器设计模式(Adapter)&g ...
- Ruby设计模式透析之 —— 适配器(Adapter)
转载请注明出处:http://blog.csdn.net/sinyu890807/article/details/9400153 此为Java设计模式透析的拷贝版,专门为Ruby爱好者提供的,不熟悉R ...
- 【原】模式之-适配器Adapter模式
适配器Adapter模式 适配器模式(Adapter Pattern)把一个类的接口变换成客户端所期待的的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作. 模式所涉及的角色有 ...
- 2、适配器 adapter 模式 加个"适配器" 以便于复用 结构型设计模式
1.什么是适配器模式? 适配器如同一个常见的变压器,也如同电脑的变压器和插线板之间的电源连接线,他们虽然都是3相的,但是电脑后面的插孔却不能直接插到插线板上. 如果想让额定工作电压是直流12伏特的笔记 ...
- java演示适配器(adapter)模式
为什么要使用模式: 模式是一种做事的一种方法,也即实现某个目标的途径,或者技术. adapter模式的宗旨就是,保留现有类所提供的服务,向客户提供接口,以满足客户的需求. 类适配器:客户端定义了接口并 ...
- 设计模式之(二)Adapter模式
今天学习Adapter模式,An adapter helps two incompatible interfaces to work together. This is the real world ...
- Java 实现适配器(Adapter)模式
平时我们会常常碰到这种情况,有了两个现成的类,它们之间没有什么联系.可是我们如今既想用当中一个类的方法.同一时候也想用另外一个类的方法.有一个解决方法是.改动它们各自的接口.可是这是我们最不愿意看到的 ...
- 适配器(Adapter)模式
适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作. 适配器模式的一些其他名称:变压器模式.转换器模式.包装(Wrapper)模式.适 ...
- 《图解设计模式》读书笔记1-2 Adapter模式
目录 Adapter即适配器,可以类比为将220V的电压的电源转为5V电压的手机充电器,起转换的作用. 明确概念: Adaptee:被适配者,即220v电压的电源 Adapter:适配器,即手机充电器 ...
随机推荐
- js三级联动效果city-picker
链接:https://pan.baidu.com/s/1NE_EO5_xGvR-y-lboYap7g 提取码:h00e 效果展示: 解决: 动态赋值: 注意:在执行赋值之前,必须执行reset和des ...
- centos 升级curl版本
1.安装repo rpm -Uvh http://www.city-fan.org/ftp/contrib/yum-repo/rhel6/x86_64/city-fan.org-release-2-1 ...
- 基于 B/S 端构建的 3D 楼宇自控可视化监控
前言 智慧楼宇和人们的生活息息相关,楼宇智能化程度的提高,会极大程度的改善人们的生活品质,在当前工业互联网大背景下受到很大关注.目前智慧楼宇可视化监控的主要优点包括: 智慧化 -- 智慧楼宇是一个生态 ...
- POJ 2386——Lake Counting(DFS)
链接:http://poj.org/problem?id=2386 题解 #include<cstdio> #include<stack> using namespace st ...
- 函数的return和参数
1.函数 将一些代码进行封装 def 函数名 括号 冒号:#创建 函数体(代码块) 函数名 + 小括号 #调用 1.1函数的返回值 return return 不写返回的是None,return写了不 ...
- [UWP] 解决FlipView图片放大的诡异bug
想要实现图片的放大缩小可以通过在Image外面套一个ScrollViewer,然后设置ScrollViewer的ZoomMode="Enabled" <FlipView It ...
- scalikejdbc 学习笔记(1)
build.sbt: import sbt._ import Process._ import Keys._ EclipseKeys.createSrc := EclipseCreateSrc.Def ...
- 【Java基础】Java开发过程中的常用工具类库
目录 Java开发过程中的常用工具类库 1. Apache Commons类库 2. Guava类库 3. Spring中的常用工具类 4. 其他工具 参考 Java开发过程中的常用工具类库 1. A ...
- js继承机制的实现
js继承机制的实现 1. 继承的概念 说明继承的最经典的例子:几何形状.实际上,几何形状只有两种,即椭圆形(是圆形的)和多边形(具有一定数量的边).圆是椭圆的一种,它只有一个焦点.三角形.矩形和五边形 ...
- Chrome常见黑客插件及用法
目录 0x00 Web Developer(网页开发者) 0x01 Firebug Lite for Google Chrome (Firebug精简版) 0x02 d3coder (decod ...