适配器模式及C++实现

适配器模式

适配器模式是很好理解的模式了,生活中也非常常见,什么插头2口转3口,什么USB转PS2,这都算是适配器模式。说白了,就是如果有一些东西提供的接口你很像用,但是你手头没有好的接口使用它,这个就需要一个适配器,将你需要的接口转换成你所拥有的接口。这样的好处也是显而易见,就是你不用改变你现在所拥有的接口,保证你在任何地方的用法都不需要修改,然后底层的实现由适配器调用需要的接口来具体实现。

常见的场景

使用第三方库的时候,第三方的库肯定不能适用所有的系统,所以需要一个适配器来转换。

优点

1.屏蔽了具体的实现方式,实现了依赖倒转。

2.可以把不统一的接口封装起来,使之成为统一的接口。

3.把本来不方便适用的接口转换成统一的接口。

缺点

C++实现

 1 #ifndef _ADAPTER_H_
2 #define _ADAPTER_H_
3
4 #include "Adaptee.h"
5
6
7 class Target
8 {
9 public:
10 Target();
11 virtual ~Target();
12
13 virtual void request() = 0;
14 };
15
16
17 class Adapter: public Target
18 {
19 public:
20 Adapter();
21 ~Adapter();
22
23 void request();
24
25
26 private:
27 Adaptee* adaptee;
28 };
29
30
31 #endif
 1 #include "Adapter.h"
2
3
4 Target::Target()
5 {
6
7 }
8
9
10 Target::~Target()
11 {
12
13 }
14
15
16 Adapter::Adapter():
17 adaptee(new Adaptee())
18 {
19
20 }
21
22
23 Adapter::~Adapter()
24 {
25
26 }
27
28
29 void Adapter::request()
30 {
31 adaptee->specificRequest();
32 }
 1 #ifndef _ADAPTEE_H_
2 #define _ADAPTEE_H_
3
4 class Adaptee
5 {
6 public:
7 Adaptee();
8 ~Adaptee();
9
10 void specificRequest();
11
12 };
13
14
15 #endif
 1 #include "Adaptee.h"
2 #include <stdio.h>
3
4
5 Adaptee::Adaptee()
6 {
7
8 }
9
10
11 Adaptee::~Adaptee()
12 {
13
14 }
15
16
17 void Adaptee::specificRequest()
18 {
19 fprintf(stderr, "this is specificRequest\n");
20 }
1 #include "Adapter.h"
2
3
4 int main()
5 {
6 Target* tar = new Adapter();
7 tar->request();
8 return 0;
9 }
1 g++ -o client client.cpp Adapter.cpp Adaptee.cpp

运行结果

 
 
分类: 设计模式
标签: 设计模式

适配器模式及C++实现的更多相关文章

  1. PHP设计模式(七)适配器模式(Adapter For PHP)

    适配器模式:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作. 如下图(借图): // 设置书的接口 // 书接口 interface BookI ...

  2. 《JS设计模式笔记》 5,适配器模式

    //适配器模式的作用就像一个转接口. jQuery("#"+id); $id=function (id) { return jQuery("#"+id)[0]; ...

  3. 设计模式(七): 通过转接头来观察"适配器模式"(Adapter Pattern)

    在前面一篇博客中介绍了“命令模式”(Command Pattern),今天博客的主题是“适配器模式”(Adapter Pattern).适配器模式用处还是比较多的,如果你对“适配器模式”理解呢,那么自 ...

  4. 设计模式(七)适配器模式(Adapter Pattern)

    一.引言 在实际的开发过程中,由于应用环境的变化(例如使用语言的变化),我们需要的实现在新的环境中没有现存对象可以满足,但是其他环境却存在这样现存的对象.那么如果将“将现存的对象”在新的环境中进行调用 ...

  5. PHP 适配器模式

    适配器模式(Adapter)模式:将一个类的接口,转换成客户期望的另一个类的接口.适配器让原本接口不兼容的类可以合作无间.     [适配器模式中主要角色]目标(Target)角色:定义客户端使用的与 ...

  6. 每天一个设计模式-3 适配器模式(Adapteer)

    每天一个设计模式-3 适配器模式(Adapteer) 1.现实中的情况 旧式电脑的硬盘是串口的,直接与硬盘连接,新硬盘是并口的,显然新硬盘不能直接连在电脑上,于是就有了转接线.好了,今天的学习主题出来 ...

  7. 设计模式--适配器模式Adapter(结构型)

    一.适配器模式 适配器模式的主要作用是在新接口和老接口之间进行适配.将一个类的接口转换成客户端期望的另外一个接口.其实适配器模式有点无赖之举,在前期设计的时候,我们就不应该考虑适配器模式,而应该通过重 ...

  8. c#设计模式-适配器模式

    一. 适配器(Adapter)模式 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作. 名称由来 这很像变压器(Adapter),变压 ...

  9. C#设计模式系列:适配器模式(Adapter)

    在实际的软件系统设计和开发中,为了完成某项工作需要购买一个第三方的库来加快开发.这带来一个问题,在应用程序中已经设计好的功能接口,与这个第三方提供的接口不一致.为了使得这些接口不兼容的类可以在一起工作 ...

  10. Net设计模式实例之适配器模式(Adapter Pattern)

    一.适配器模式简介(Brief Introduction) 适配器模式,将一个类装换成客户期望的另外一个接口.Adapter模式使的原本由于接口不兼容而不能工作的那些类可以一起工作. 二.解决的问题( ...

随机推荐

  1. 2014阿里巴巴研发project师暑期实习生面试经验

    2014阿里巴巴研发project师暑期实习生面试经验 作者:林子 Blog:  http://blog.csdn.net/u013011841 时间:2014年8月 出处:http://blog.c ...

  2. InstallShield集成安装MSDE2000最小版本(二) fishout特许授权发布

    原文:InstallShield集成安装MSDE2000最小版本(二) fishout特许授权发布 原帖地址:http://blog.csdn.net/fishout/archive/2009/10/ ...

  3. A在SP.NET跨页多选

    在ASP.NET跨页多选 本文介绍怎样在ASP.NET中实现多页面选择的问题.其详细思路非常easy:用隐藏的INPUT记住每次选择的项目,在进行数据绑定时.检查保存的值,再在DataGrid中进行选 ...

  4. 它们的定义android滑动菜单

    在这里实现了两个滑动菜单效果,的拖放内容的第一部分,菜单拖出像这样的效果感觉,另一种是拖动内容.后面的内容固定菜单.我感觉有层次感的效果,如下面 第一种效果的代码实现例如以下: package com ...

  5. PHP 3:从Login界面谈PHP标记

    原文:PHP 3:从Login界面谈PHP标记 前一篇文章简要介绍了此实例.OK,我们就从第一个页面Login页面入手吧.还是看看界面怎么样,是不是很想指导它到底是如何实现的呢?好的,看看其代码吧: ...

  6. Linux Kernel的Makefile与Kconfig文件的语法

    https://www.kernel.org/doc/Documentation/kbuild/kconfig-language.txt Introduction ------------ The c ...

  7. ser2net使用

    在ubuntu下或者openwrt下安装了ser2net程序之后,可以将串口中的数据转发为以太网数据. 设置在/etc/ser2net.conf中最后: 3002:0:/dv/ttyUSB0:1152 ...

  8. 学习html5的WebSocket连接

    1.什么是WebSocket WebSocket 是一种自然的全双工.双向.单套接字连接.使用WebSocket,你的HTTP 请求变成打开WebSocket 连接(WebSocket 或者WebSo ...

  9. C#发送邮件三种方法(Localhost,SMTP,SSL-SMTP)

    原文:C#发送邮件三种方法(Localhost,SMTP,SSL-SMTP) 最近公司由于一个R&I项目的需要,用户要求在购买产品或出货等一些环节,需要发送邮件提醒或者说每周一让系统自动采集数 ...

  10. 【UNIX网络编程(一)】套接字地址结构、网络字节顺序和地址转换功能

    介绍:应该用在网络编程实现每个套接字地址结构.所以主套接字地址结构后前提网络计划编制,地址结构可以在两个方向上发送:从工艺到内核和内核处理.构中的二进制值之间进行转换. 大多数套接字函数都须要一个指向 ...