软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累。最近看设计模式的书,对于每个模式,用C++写了个小例子,加深一下理解。主要参考《大话设计模式》和《设计模式:可复用面向对象软件的基础》(DP)两本书。本文介绍适配器模式的实现。

DP上的定义:适配器模式将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。它包括类适配器和对象适配器,本文针对的是对象适配器。举个例子,在STL中就用到了适配器模式。STL实现了一种数据结构,称为双端队列(deque),支持前后两段的插入与删除。STL实现栈和队列时,没有从头开始定义它们,而是直接使用双端队列实现的。这里双端队列就扮演了适配器的角色。队列用到了它的后端插入,前端删除。而栈用到了它的后端插入,后端删除。假设栈和队列都是一种顺序容器,有两种操作:压入和弹出。下面给出相应的UML图,与DP上的图差不多。

根据上面的UML图,很容易给出实现。

[cpp] view plaincopy print?
  1. //双端队列
  2. class Deque
  3. {
  4. public:
  5. void push_back(int x) { cout<<"Deque push_back"<<endl; }
  6. void push_front(int x) { cout<<"Deque push_front"<<endl; }
  7. void pop_back() { cout<<"Deque pop_back"<<endl; }
  8. void pop_front() { cout<<"Deque pop_front"<<endl; }
  9. };
  10. //顺序容器
  11. class Sequence
  12. {
  13. public:
  14. virtual void push(int x) = 0;
  15. virtual void pop() = 0;
  16. };
  17. //栈
  18. class Stack: public Sequence
  19. {
  20. public:
  21. void push(int x) { deque.push_back(x); }
  22. void pop() { deque.pop_back(); }
  23. private:
  24. Deque deque; //双端队列
  25. };
  26. //队列
  27. class Queue: public Sequence
  28. {
  29. public:
  30. void push(int x) { deque.push_back(x); }
  31. void pop() { deque.pop_front(); }
  32. private:
  33. Deque deque; //双端队列
  34. };

使用方式如下:

[cpp] view plaincopy print?
  1. int main()
  2. {
  3. Sequence *s1 = new Stack();
  4. Sequence *s2 = new Queue();
  5. s1->push(1); s1->pop();
  6. s2->push(1); s2->pop();
  7. delete s1; delete s2;
  8. return 0;
  9. }

设计模式C++实现(3)——适配器模式相关推荐

  1. 设计模式(三)--适配器模式

    设计模式(三)–适配器模式 文章目录 设计模式(三)--适配器模式 其他链接 1. 适配器模式 1.1 介绍 1.2 类适配器 1.3对象适配器 1.4 对比 其他链接 JVM学习笔记(一) JVM学 ...

  2. 老王讲设计模式(八)——适配器模式

    适配器模式,是作为两个不兼容的接口之间的桥梁.这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能. 公司的发展速度很快,一不小心,就收购了一个创业团队去做细分市场.这么一个改变,对于公司来说 ...

  3. 设计模式(七)——适配器模式

    设计模式(七)--适配器模式 概述 类适配器模式 对象适配器模式 应用场景 概述 我们在给手机充电的时候,一般会有一个数据线和充电头,然后插在插排上.我们是没有办法将数据线直接插在插排上的,所以我们需 ...

  4. JAVA设计模式——第 8 章 适配器模式【Adapter Pattern】(转)

    好,请安静,后排聊天的同学别吵醒前排睡觉的同学了,大家要相互理解嘛.今天讲适配器模式,这个模式也很简单,你笔记本上的那个拖在外面的黑盒子就是个适配器,一般你在中国能用,在日本也能用,虽然两个国家的的电 ...

  5. c语言 适配器模式例子,NodeJS设计模式总结【单例模式,适配器模式,装饰模式,观察者模式】...

    NodeJS设计模式总结[单例模式,适配器模式,装饰模式,观察者模式] 发布时间:2020-08-21 03:08:03 来源:脚本之家 阅读:117 作者:lucky芬 本文实例讲述了NodeJS设 ...

  6. 设计模式(五)适配器模式Adapter(结构型)

    设计模式(五)适配器模式Adapter(结构型) 1. 概述: 接口的改变,是一个需要程序员们必须(虽然很不情愿)接受和处理的普遍问题.程序提供者们修改他们的代码;系统库被修正;各种程序语言以及相关库 ...

  7. Java设计模式(建造者模式-适配器模式-桥接模式)

    Java设计模式Ⅲ 1.建造者模式 1.1 建造者模式概述 1.2 建造者模式的注意事项和细节 1.3 代码理解 2.适配器模式 2.1 类适配器模式 2.1.1 代码理解 2.2 对象适配器模式 2 ...

  8. 设计模式系列6:适配器模式(Adapter Pattern)

    定义 将一个类的接口转换成客户希望的另一个接口,适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作.    --<设计模式>GoF UML类图 使用场景 在遗留代码复用,类 ...

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

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

  10. 设计模式笔记六:适配器模式

    原文:http://www.runoob.com/design-pattern/ 少许个人理解,如有错误请指出(本文基本照搬,因为比较简单) 适配器模式(Adapter Pattern)是作为两个不兼 ...

最新文章

  1. Unity5.6+ 导出Android 应用程序apk的环境配置及导出过程
  2. 刻意练习:LeetCode实战 -- Task29. 加油站
  3. Python数组操作2
  4. BZOJ3999: [TJOI2015]旅游
  5. SpringBoot非官方教程 | 第三篇:SpringBoot用JdbcTemplates访问Mysql
  6. 自定义_Excel中的自定义函数(自定义函数的基础内容)
  7. Erlang之ETS,DETS入门
  8. VINS-MONO边缘化策略
  9. 使用OLED屏显示汉字
  10. 程序员真的是最容易改变命运的一个职业
  11. python print()函数控制输出格式
  12. 跑跑卡丁车蛋白石盒喜当托儿纪念,2022/06/12,22:59:24
  13. OSChina 周五乱弹 ——做宇宙最低调的程序员.
  14. 对于机器学习中数据拟合度和模型复杂度的一些建议
  15. 二陈丸配什么吃不上火_二陈丸二妙丸搭配吃要吃多久 二陈丸有什么注意事项...
  16. android rootfs_android.img,进度栏和Rootfsimg自动更新还应该解决了一些兼容性问题
  17. 数据结构--------顺序存储
  18. 绘声绘影给视频加多个马赛克和动态马赛克方法
  19. 多家自媒体平台实现内容互通:自媒体平台的圈地运动
  20. 3dMax 笔记目录

热门文章

  1. 成功解决UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc2 in position 0: invalid continuation byt
  2. AI公开课:19.04.04李航—字节跳动AILab总监《深度学习与自然语言处理:评析与展望》课堂笔记以及个人感悟
  3. HDFS的读文件、写文件过程
  4. 单片机成长之路(51基础篇) - 008 C51 的标示符和关键字
  5. tp5,thinkphp5,隐藏index.php,隐藏入口文件
  6. [BZOJ]1503: [NOI2004]郁闷的出纳员
  7. Codeforces 603A Alternative Thinking
  8. Ubuntu下千千静听Audacious的安装步骤详解
  9. 排序 (2)快速排序
  10. 区块链与边缘计算(1)基本概念