设计模式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:适配器,即手机充电器 ...
随机推荐
- Hadoop点滴-HDFS命令行接口
1.-help[cmd] 显示命令的帮助信息 ./hdfs dfs -help ls1 2.-ls(r) 显示当前目录下的所有文件 -R层层循出文件夹 ./hdfs dfs -ls /log/map ...
- jquery 取得select选中的值
1.取得选中的值 jQuery("#select").val();是取得选中的值 2.取得的文本 jQuery("#select option:selected&quo ...
- docker相关概念介绍
关键词:docker容器与docker镜像 他们之间的关系是docker容器通过docker镜像来创建 docker镜像就是些像ubuntu15.10,ubuntu14.2一样的系统 docker容器 ...
- mongoDB4.0数据库
下载:https://www.mongodb.com/ 安装:略 注意:使用前修改bin目录下配置文件mongodb.cfg,删除最后一行的'mp'字段 1. 启动服务与终止服务 net start ...
- PHP代码审计辅助脚本
#!/usr/bin/env python import sys import os def main(): print ''' -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ...
- 机器学习:IB1算法的weka源码详细解析(1NN)
机器学习的1NN最近邻算法,在weka里叫IB1,是因为Instance Base 1 ,也就是只基于一个最近邻的实例的惰性学习算法. 下面总结一下,weka中对IB1源码的学习总结. 首先需要把 ...
- 新手也能看懂的 SpringBoot 异步编程指南
本文已经收录自 springboot-guide : https://github.com/Snailclimb/springboot-guide (Spring Boot 核心知识点整理. 基于 S ...
- 80%面试官不知道的dubbo → 【redis注册中心】
dubbo的redis注册中心配置和注意事项 配置provider和consumer项目的pom.xml,增加如下2个依赖: org.apache.commons commons-pool2 2.4. ...
- freertos学习
freertos的基本框架如下 注意有三点很重要: 1.任务的资源 (1)任务优先级:freertos 能够调度的任务优先级在freertosConfig.h中的configMAX_PRIORITIE ...
- OpenvSwitch系列之ovs-vsctl命令使用
Open vSwitch系列之一 Open vSwitch诞生 Open vSwitch系列之二 安装指定版本ovs Open vSwitch系列之三 ovs-vsctl 命令使用 OpenvSwit ...