设计模式之适配器模式
来源:互联网 发布:淘宝上复制链接在哪里 编辑:程序博客网 时间:2024/06/05 23:43
适配器模式
定义:将一个类的接口转换成客户希望的另外一个接口,Adapter使原本由于接口不兼容而不能一起工作的那些类可以一起工作
判断是否使用适配器模式的一个简单方法就是两个具有不同结构的类他们所要做的任务是否相同或者相似
例如我们一般电源都是220V的电源,但是我们电脑充电器需要的并不是220V,假设我们需要的电压是200V,那么为了给我们电脑充电,我们得找到一个提供200V的电压,但是220V和200V都是提供电压,只是他们的电压不相同而已,其他的工作基本就是相同的,所以我们可以利用220V电压将它变成200V的电压,这个时候就需要一个适配器来完成这项工作了
根据上述条件,我们可以得到下面的代码
#include<iostream>using namespace std;//电脑需要的电压//假设200Vclass ComVol{public:virtual void Request(){cout << "需要200V的电压" << endl;}};//电源电压220Vclass PowerSupply{public:void Provide(){cout << "提供220V的电压" << endl;}};//适配器class Adapter:public ComVol{private:PowerSupply* supply;public:Adapter(){supply = new PowerSupply();}~Adapter(){delete supply;supply = NULL;}void Request(){supply->Provide();cout << "将220V电压转换成200V" << endl;}};int main(void){ComVol* comvol = new Adapter();comvol->Request();delete comvol;comvol = NULL;return 0;}这里适配器的主要功能主要就是将220V的转换成200V的,在客户端里我们任然调用的是200V的电压,我们并不需要知道它提供的是多少。
适配器主要分为两种分别是对象适配器和类适配器
它们的区别如下
类适配器:它是通过继承来实现的(一般是多重继承)
对象适配器:它是通过组合的方式实现
对象适配器代码:
class Target{public:virtual void Request(){cout << "客户的一般请求" << endl;}};class Adaptee{public:void SpecialRequest(){cout << "特殊的请求" << endl;}};class Adapter :public Target{private:Adaptee* adaptee;public:Adapter(){adaptee = new Adaptee();}~Adapter(){delete adaptee;adaptee = NULL;}void Requset(){adaptee->SpecialRequest();}};
类适配器代码
class Target{public:virtual void Request(){cout << "客户的一般请求" << endl;}};class Adaptee{public:void SpecialRequest(){cout << "特殊的请求" << endl;}};class Adapter :public Adaptee, Target {public:void Requset(){SpecialRequest();}};适用情况:
1、当我们想要创建一个已经存在的类,只是他的接口和当前不符合时
2、想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。这些源类不一定有很复杂的接口。
阅读全文
0 0
- 设计模式之适配器
- 设计模式之适配器
- 设计模式之适配器
- 设计模式之适配器
- 设计模式 之 适配器
- 设计模式 之 适配器
- 设计模式之适配器
- 设计模式之适配器
- 设计模式之适配器
- 设计模式之适配器
- 设计模式之适配器
- 设计模式 之 适配器模式
- 设计模式之适配器模式
- 设计模式之适配器模式
- 设计模式之适配器模式
- 设计模式之适配器模式
- 设计模式之适配器模式
- 设计模式之--适配器模式.
- shell脚本中命令代换:反引号、$()、eval区别
- 21_ServletContext补充
- 如何从源码编译SITL
- C语言获取系统时间方法
- Volatile关键字解读(一)
- 设计模式之适配器模式
- 利用Excel将二维表转换为一维表
- H.264标准(三)F4V封装格式详解
- Django 实现分页显示
- 普利姆(Prime)算法
- linux java编译 Error: Could not find or load main class hello.java
- java的引用数据类型
- Oracle中常用SQL语句(一)
- 使用Pandas对数据进行筛选和排序