用C++跟你聊聊“适配器模式”

举报
看,未来 发表于 2020/12/30 01:21:53 2020/12/30
【摘要】 文章目录 电源适配器适配器模式类图适配器模式实现适用场景扁鹊治病的小故事 电源适配器 何为适配器?大家都知道,我国的标准电压是220V,但是我们平时使用的电器可接受不了这个电压,比方说电脑、手机,认真去看他们的充电器,还有一个名字,叫电源适配器适配器是干嘛用的?就是将功能相似或相同、但是接口不同的东西,使得他们可以对接。就像电插座和电器插口,功能都...

在这里插入图片描述

电源适配器

何为适配器?大家都知道,我国的标准电压是220V,但是我们平时使用的电器可接受不了这个电压,比方说电脑、手机,认真去看他们的充电器,还有一个名字,叫电源适配器适配器是干嘛用的?就是将功能相似或相同、但是接口不同的东西,使得他们可以对接。就像电插座和电器插口,功能都是通电,但是电压不同,适配器就起这么一个中间人的作用。又比如翻译,两个不同语言的人进行通话,相同点都是在讲话和听话,但是不同的是语言,翻译就起到中间转换的作用。

适配器并不能改变事物原有的功能,它只是把输入的功能以它该输出的方式进行输出。

适配器模式类图

类模式适配器
在这里插入图片描述
对象模式适配器

在这里插入图片描述

适配器模式实现

#include <iostream>
using namespace std;

//目标接口类,客户需要的接口
class Target
{
public: Target(){}; virtual ~Target(){}; virtual void Request();//定义标准接口 { cout << "Target::Request()" << endl;
	}
};

//需要适配的类
class Adaptee
{
public: Adaptee(){}; ~Adaptee(){}; void Adaptee::SpecificRequest()
	{ cout << "Adaptee::SpecificRequest()" << endl;
	}
};


//类模式,适配器类,通过public继承获得接口继承的效果,通过private继承获得实现继承的效果
class Adapter:public Target,private Adaptee
{
public: Adapter(){}; ~Adapter(){}; virtual void Request();//实现Target定义的Request接口
	{ cout << "Adapter::Request()" << endl; this->SpecificRequest(); cout << "----------------------------" <<endl;
	}
};

//对象模式,适配器类,继承Target类,采用组合的方式实现Adaptee的复用
class Adapter1:public Target
{
public: Adapter1::Adapter1(Adaptee* _adaptee)
	{ this->_adaptee = _adaptee;
	} Adapter1(); ~Adapter1(); virtual void Request();//实现Target定义的Request接口
	{ cout << "Adapter1::Request()" << endl; this->_adaptee->SpecificRequest(); cout << "----------------------------" <<endl;
	}
private: Adaptee* _adaptee;
};

int main()
{ //类模式Adapter Target* pTarget = new Adapter(); pTarget->Request(); //对象模式Adapter1 Adaptee* ade = new Adaptee(); Target* pTarget1= new Adapter1(ade); pTarget1->Request(); //对象模式Adapter2 Target* pTarget2 = new Adapter1(); pTarget2->Request(); return 0;
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79

适用场景

学习了这么些设计模式,还没遇到这么简单却实用的模式。但是,“适配器模式”好归好,可不要本末倒置。
如果在开发期间出现不适配,最好直接重构。

适配器一般是用于双方代码都不太容易修改的时候,比方说使用第三方库,发现和自己的项目不适配、比方说要复用过去的功能块,但是规格已经变过了等等。

扁鹊治病的小故事

如有雷同,那就是我借鉴了人家的故事。主要就是为了告诉大家,这个模式,就像“亡羊补牢”般。

传说有个国王问扁鹊,你们家兄弟三人,都·精通医术,那么谁的医术更加高明?
扁鹊回答说:我大哥最强,然后是我二哥,我是真的菜。
国王又问:那为什么你的名声最大?
扁鹊说:我大哥治病,都是打疫苗,所以人家不觉得他会治病;我二哥治病,都是在病情刚刚露头的时候就掐灭,所以人家都觉得他只会治疗一些小毛病;而我都是在人家病重的时候才发现,所以动作都是大手笔,人家才把我的名声传出去。所以说,我大哥是最强的,其次是我二哥,我是最菜的那个。

文章来源: lion-wu.blog.csdn.net,作者:看,未来,版权归原作者所有,如需转载,请联系作者。

原文链接:lion-wu.blog.csdn.net/article/details/106174719

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。