设计模式之适配器模式(Adapter)

news/2024/11/29 20:37:14/
设计模式之适配器模式(Adapter)

我想要是说适配器模式,提一下“电压”、“耳机”、“充电器”和 "USB”  的例子应该是比较恰当的了。就说说自己的亲身经历,我原来的手机是NOKIA5730。后来也不知道有没有国行,但是不推荐大家买这款手机,不适用的哈。我买的时候只有港货,可是大家知道的啊,香港的充电器和我们大陆的充电器规格是不一样的,那我要是在国内充电,原机带的充电器根本用不了,所以要花25RMB买一个公牛的适配器,这样才可以充电!!

1.初识适配器模式

我想作为一个IT人士,对于适配器应该不陌生,只不过要从理论上讲可能描述的不够到位。实际上,好多系统的开发,都要用到第三方软件,这样的话,第三方软件的接口和我们开发的软件的接口往往是不一致的,那么这时候就要“适配”了。看看GoF对适配器模式的说法:


适配器模式:将一个类的接口转换成客户希望的另外一个接口,适配器模式使得由于接口不兼容而不能一起工作的那些类可以一起工作!!!


一般情况下,适配器包含下面的几个角色:

目标抽象角色(Target) : 定义客户所期待要使用的接口,我们把手机当做客户端,客户端所需要使用充电器是大陆标准。

源角色(Adaptee) : 需要被适配的接口,在这里指的是我的手机买的时候自带的港版充电器。

适配器角色(Adapter) :用来把源接口转换成符合要求的目标接口的设备,在这里指的是我自己买的公牛的适配器。

客户端(Client) :这里指的就是我那个港版的手机了。

现在来看看适配器模式的结构图

 

              

注:这里我们只说一致适配器模式:对象适配器模式,而不谈类适配器模式。

2.实现适配器模式的例子

现在,我们看看适配器模式到底是怎么实现的,怎么就能“在大陆使用港版的充电器了呢??”

复制代码
 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 class TargetCharger
 6 {
 7 public:
 8     virtual void ChargeRequest()
 9     {
10     }
11 };
12 class AdapteeCharger
13 {
14 public:
15     void SpecificRequest()
16     {
17         cout<<"使用港版充电器充电!!!"<<endl;
18     }    
19 };
20 class AdapterCharger : public TargetCharger
21 {
22 private:
23     AdapteeCharger adaptee;
24 public:
25     virtual void ChargeRequest()
26     {
27         cout<<"利用了适配器:公牛充电器,";
28         adaptee.SpecificRequest();
29     }
30 };
31     
32 
33 int main()
34 {
35     AdapterCharger Adapter;
36     TargetCharger *target = &Adapter;
37     target->ChargeRequest();
38     return 0;
39 }
复制代码

观察代码和运行结果,得知策略模式确实是实现了!!确实完成了在大陆使用港版充电器的目的了。那么我们想一想利用适配器模式有什么好处呢?不妨假设一下,现在我又在欧洲买了一个手机,这时手机又不能再大陆充电了,怎么办呢?这时我们只需要在写一个类继承TargetCharget类完成对欧版充电器的适配,这样我们有能很方便的会用欧洲的手机。怎么样?使用适配器模式还能提供统一的接口。
3.实现适配器模式的场合和好处

首先,必须强调的是,适配器模式适用于使用第三方软件的情况,并且第三方软件提供的接口和我们开发的系统接口不一致,同时我们正在开发的系统想要改变接口已经不容易了,这时候使用适配器就比较好。其实,适配器模式更像是一个弥补型的模式,当接口不一致时,并且系统开发已经进入了很难改变的时候,这时候可以使用适配器模式,但是如果在开发的早期就发现了接口不一致,尽量不要采用适配器模式,而是最后把接口设计的一致比较好。也就是说适配器模式大部分在软件开发后期使用的一种设计模式。

具体适用的场合:

1.正在开发的系统想使用一个已经存在的类,并且该类很重要,但是该类提供的接口和系统不一致。

2.使用了第三方软件,并且第三方提供的软件的接口和系统不一致。

3.两个已经存在的类完成的功能一致,但是接口不一样。可以采用适配器模式,提供一致的接口。

4.对旧系统的复用。

使用适配器模式的好处:

1.充分利用已经存在的资源,实现软件的复用,节省开发成本和时间。


http://www.ppmy.cn/news/195554.html

相关文章

java设计模式-适配器模式

适配器模式 适配器模式&#xff08;Adapter Pattern&#xff09;是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式&#xff0c;它结合了两个独立接口的功能。 这种模式涉及到一个单一的类&#xff0c;该类负责加入独立的或不兼容的接口功能。举个真实的例…

自由意志是否受机器控制?

主要作者 | R.Douglas Fields 改写作者 | 王依倩 翻译 | 王依倩 排版|Tina Maggie Chiang for Quanta Magazine 1963年&#xff0c;西班牙神经学家何塞曼努埃尔罗德里格斯德尔加多(Jos Manuel Rodriguez Delgado)在一场蔑视死亡的公开演示中&#xff0c;展示了如何通过无线电控…

桌面线材收纳好帮手--公牛GN-F2151U收纳盒插座

一直想把桌面的线材整理一下&#xff0c;就买了公牛的 GN-F2151U 收纳盒&#xff0c;6 月 1 日买的&#xff0c;现在才来写&#xff0c;也是够能拖的。 拖了一个月 首先说一下为什么拖了一个月才开箱。 我的桌面一直都比较乱&#xff0c;买这个收纳箱就是想让桌面更加整洁&…

2023深圳国际充电桩展览会

2023深圳充电桩展/2023深圳国际充电桩展览会 The 17th Shenzhen International Electric Vehicle Supply Equipment Fair 2023年5月11-13日 深圳会展中心&#xff08;福田&#xff09; 2023上海第18届国际充电设施展览会 时间&#xff1a;2023年8月23-25日 地点&#xff1a;上海…

如何解决苹果 MagSafe 充电失败或速度慢?

MagSafe 允许您将iPhone连接到磁性充电器。它在 iPhone 12 上可用&#xff0c;它有两个功能&#xff1a;确认和充电。有时使用 MagSafe 充电会导致问题&#xff0c;或者它没有牢固连接。小编将介绍多种原因和解决方案。 如果使用 MagSafe 充电不起作用 MagSafe 使用与其他充电…

【项目实践】充电台灯电路拆解

前言 记得还是在大一开学的时候买了一个充电台灯&#xff0c;没想到只用了一个多学期就报废了&#xff0c;插上电源灯也不亮&#xff0c;之后一直放在宿舍闲置了&#xff0c;最近收拾宿舍翻到这个台灯&#xff0c;于是手痒想拆解一下这个台灯&#xff0c;以下是这个下午的实践记…

氮化镓充电器哪家做得好_这颗国产器看似简单:每个氮化镓充电器都少不了

充电头网在OPPO 50W饼干氮化镓快充发布会当天便这款产品其进行了详细的拆解。据充电头网分析得知&#xff0c;这款充电器输入端采用了一颗来自深圳市沃尔德实业有限公司的软桥WRMSB40M(沃尔德已取得“软桥”以及“Soft-Bridge”的注册商标)&#xff1b;并基于纳微氮化镓功率器件…

充电器混用的小担心

用不同的充电器给不同的笔记本/手机充电有什么问题吗&#xff1f; 按照电路的知识&#xff0c;应该只要电流不过大&#xff0c;不把芯片烧坏就没什么问题了吧。而考虑到电池寿命和专业性的局限&#xff0c;总会有一些小担心。在网上查了些相关问题&#xff0c;总体结论如下&…