C++ 编程实现-适配器模式-->初学者
来源:互联网 发布:赵薇为啥叫赵日天 知乎 编辑:程序博客网 时间:2024/06/04 01:21
---这片文章是从一个PPT上抄下来的,感觉PPT讲的比较易懂。自己学习用的。---
适配器模式定义:
将两个不兼容的类纠合在一起使用,属于结构型模式,需要有Adaptee(被适配者)和Adaptor(适配器)两个身份。
应用:
如果你在中国买了个笔记本电脑,然后你现在要去美国,美国那边电源插口和中国肯定是不一样的,你要买个转接头把那边的插头转换成前面圆形后面扁形的那种美式插头,这就是适配器。在编程实现中,Adapter模式就是将一个类的接口转换成客户希望的另一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
常见的情景:
(1)系统需要使用现有的类,而此类的接口不符合系统的需要。
(2)想要建立一个可以重复使用的类,用于一些彼此之间没有太大关联的一些类,包括一些可能在将来引用的类一起工作,这些类不一定有一致的接口。
(3)通过接口转换,将一个类插入另一个类系中。有人举过这样一个例子:虎与飞禽是没有直接联系的两类动物,但是现在出来了个“飞虎”,它同时具有虎肉食动物跟飞禽会飞的特质,要在飞禽这个类系中添加一个成员类“飞虎”出来直接实现飞虎类,还有一种简单的方法是实现一个Adapter类,在其中包含一个虎的对象,同时实现飞禽的接口即可。当然,对于这个问题,多继承或者实现接口可能是一个更直观的办法,在实际应用中,可视具体需要确定采用何种作法。
代码实现:
下面是Adapter.h。
//需要被adapt的类class Target{public:Target(){};virtual ~Target(){};virtual void Request()=0;};class Adaptee{public:Adaptee(){}; ~Adaptee(){};void SpecialRequest();};class Adapter:public Target{public:Adapter(Adaptee* pAdaptee);virtual ~Adapter();virtual void Request();private:Adaptee* m_pAdaptee;};下面是Adapter.cpp的代码:
#include "Adapter.h"#include <iostream>void Adaptee::SpecialRequest(){std::cout<<"SpecialRequest of Adaptee\n";}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_pAdaptee->SpecialRequest();}下面是MIAN.cpp:
#include "Adapter.h"#include <stdlib.h>int main(){Adaptee *pAdaptee = new Adaptee;Target *pTarget = new Adapter(pAdaptee);pTarget->Request();delete pTarget;system("pause");return 0;}/*执行结果:Request of AdapterSpecialRequest of Adaptee*/结束。
0 0
- C++ 编程实现-适配器模式-->初学者
- 适配器模式C语言实现
- C++ 编程实现--单例模式-->初学者
- C++ 编程实现 观察者模式--订阅模式-->初学者。
- 接口模式 - 1.1 适配器模式 --代码实现(C#)
- 【C++】Chapter13:适配器模式
- Objective C--适配器模式
- Objective C 适配器模式
- 适配器模式(C++)
- 适配器模式(C++)
- php实现适配器模式
- C++实现适配器模式
- 适配器模式 C++实现
- 适配器模式lua实现
- php实现适配器模式
- 适配器模式C++实现
- java实现适配器模式
- 适配器模式实现
- python 操作文件
- 解决抢购秒杀抽奖等大流量并发入库导致的库存负数的问题
- Java回调函数之callback接口
- 函数实现俩个数的交换
- Android ViewPager多页面滑动切换以及动画效果
- C++ 编程实现-适配器模式-->初学者
- html+js获取系统当前日期并输出
- 传智播客《巴巴运动网视频教程(11-106)》avi格式以及后续44集视频包含全部源代码和资源
- 部署extJs时,buildingWorkspace特别慢,解决方法
- nginx_lua_module模块的安装(实践过可行)
- Solr in action 2
- 【dfs+线段树get/set】 编程之美 tree
- HTTP_X_FORWARDED_FOR获取用户Ip地址通用方法常见安全隐患
- android webview 加载js的方法时,有时候会报Uncaught ReferenceError的错误