常见设计模式解析和实现(C++)Adapt模式
作用:将一个类的接口转换成客户希望的另一个接口。Adapt模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
UML示意图
1) 采用继承原有接口类的方式

2)采用组合原有接口类的方式

解析:
Adapt模式其实就是把完成同样一个功能但是接口不能兼容的类桥接在一起使之可以在一起工作,这个模式使得复用旧的接口成为可能。
实现:
Adapt模式有两种实现的方法,一种是采用继承原有接口的方法,一种是采用组合原有接口类的方法,这里采用的是第二种实现方法
1) Adapt.h
- class Target
- {
- public:
- Target(){}
- virtual ~Target(){}
- virtual void Request() = 0;
- };
- // 与被Adapt对象提供不兼容接口的类
- class Adaptee
- {
- public:
- Adaptee(){}
- ~Adaptee(){}
- void SpecialRequest();
- };
- // 进行Adapt的类,采用聚合原有接口类的方式
- class Adapter : public Target
- {
- public:
- Adapter(Adapter* pAdaptee);
- virtual ~Adapter();
- virtual void Request();
- private:
- Adaptee* m_pAdatee;
- };
(2)Adapt.cpp
- #include "Adapt.h"
- #include <iostream>
- void Adaptee::SpecialRequest()
- {
- std::cout << "SpecialRequest of Adaptee\n";
- }
- void Adapter::Adapter(Adaptee *pAdaptee) : m_pAdaptee(pAdaptee)
- {
- }
- Adapter::~Adapter()
- {
- delete m_pAdaptee;
- m_pAdaptee = NULL;
- }
- void Adapter::Request()
- {
- std::cout << "Request of Adapter\n";
- m_pAdapter->SpecialRequest();
- }
(3)main.cpp
- #include "Adapter.h"
- #include "stdlib.h"
- int main()
- {
- Adaptee *pAdaptee = new Adaptee;
- Target *pTarget = new Adapter(pAdaptee);
- pTarget->Request();
- delete pTarget;
- system("pause");
- }
常见设计模式解析和实现(C++)Adapt模式的更多相关文章
- java设计模式解析(11) Chain责任链模式
设计模式系列文章 java设计模式解析(1) Observer观察者模式 java设计模式解析(2) Proxy代理模式 java设计模式解析(3) Factory工厂模式 java设计模式解析(4) ...
- Javascript常见设计模式解析
设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性.毫无疑问,设计模式于己 ...
- 常见设计模式解析和实现(C++)FlyWeight模式
作用:运用共享技术有效地支持大量细粒度的对象 UML结构图: 解析: Flyweight模式在大量使用一些可以被共享的对象的时候使用.比如,在QQ聊天时很多时候你懒得回复又不得不回复,一般会用一些客套 ...
- 常见设计模式解析和实现(C++)Prototype模式(原型模式)
作用:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. UML结构图: 抽象基类: 1) Prototype:虚拟基类,所有原型的基类,提供Clone接口函数 接口函数: 1) P ...
- iOS设计模式解析(六)代理模式
代理模式:为其他对象创建一个代理以控制对这个对象的访问 UML解释:客户端向Proxy发起一个Request()请求,Proxy对象会把这个Request转发给Proxy对象的RealSubject. ...
- iOS设计模式解析(四)组合模式
组合模式:将对象组合成树形结构以表示"部分-整体"的层次结构.组合是的用户对单个对象和组合对象的使用具有一致 Cocoa Touch中组合模式使用:Cocoa Touch框架中,U ...
- C++设计模式 -- 解析和实现
原文地址 http://c.chinaitlab.com/special/sjms/Index.html#a 导航目录 ※ 设计模式解析和实现之一-Factory模式 ※ 设计模式解析和实现之八-C ...
- java设计模式解析(1) Observer观察者模式
设计模式系列文章 java设计模式解析(1) Observer观察者模式 java设计模式解析(2) Proxy代理模式 java设计模式解析(3) Factory工厂模式 java设计模式解析( ...
- Golang 常见设计模式之单例模式
之前我们已经看过了 Golang 常见设计模式中的装饰和选项模式,今天要看的是 Golang 设计模式里最简单的单例模式.单例模式的作用是确保无论对象被实例化多少次,全局都只有一个实例存在.根据这一特 ...
随机推荐
- [转]Win7下Eclipse中文字体太小
最近新装了Win7,打开eclipse3.7中文字体很小,简直难以辨认.在网上搜索发现这是由于Eclipse 3.7 用的字体是 Consolas,显示中文的时候默认太小了. 解决方式有两种:一. ...
- PKUSC 模拟赛 day2 上午总结
今天上午考得不是很好,主要还是自己太弱QAQ 开场第一题给的图和题意不符,搞了半天才知道原来是走日字形的 然后BFS即可 #include<cstdio> #include<cstr ...
- lintcode 中等题:find the missing number 寻找缺失的数
题目 寻找缺失的数 给出一个包含 0 .. N 中 N 个数的序列,找出0 .. N 中没有出现在序列中的那个数. 样例 N = 4 且序列为 [0, 1, 3] 时,缺失的数为2. 注意 可以改变序 ...
- java io异步
1.一般来说,可以通过多线程的方式来实现异步 2.同步和异步着重点在于多个任务的执行过程中,一个任务的执行是否会导致整个流程的暂时等待: 3.而阻塞和非阻塞着重点在于发出一个请求操作时,如果进行操作的 ...
- Shell脚本的编写
筛选后统计总数 cat logs | grep IconsendRedirect | wc -l >> bb.log 筛选后分类统计并且排序 cat logs | grep Iconsen ...
- 转:[Android问答] 开发环境问题集锦
工欲善其事,必先利其器. 和iOS开发相比,Android的开发环境的版本比较多,随之而来的问题也多.显然,我们不应该浪费宝贵的时间在解决开发环境带来的问题上,为此本文总结了常见的开发环境问题和解决方 ...
- sudo
sudo的目的:为非根用户授予根用户的权限: 配置文件:/etc/sudoers visudo命令编辑修改/etc/sudoers配置文件 1.一般用户赋权设置: [root@localhost ~] ...
- 车牌识别LPR(五)-- 一种车牌定位法
该方法是某个文章中看到的,有点忘了是那一篇了,看的太多也太久了. Step1.把采集到的RGB图像转换为HSI图像. HSI模型能反映人对色彩的感知和鉴别能力,非常适合基于色彩的图像的相似比较,故采用 ...
- 车牌识别LPR(一)-- 研究背景
在年尾用了几天的时间将2014年的所有工作都总结了一遍,将之前的文档综合了下. 以下是LPR系统,车牌识别的一些总结资料. 第一篇:LPR研究背景 汽车的出现改变了以往出行徒步和以马代步的时代,极大地 ...
- linux源码Makefile详解
1.Makefile的作用 (1)决定编译哪些文件 (2)怎样编译这些文件 (3)怎样连接这些文件,最重要的是它们的顺序如何 2.Linux内核Makefile分类 ***************** ...