国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

深入解析設(shè)計(jì)模式中的適配器模式在C++中的運(yùn)用

2020-05-23 14:07:41
字體:
供稿:網(wǎng)友
這篇文章主要介紹了設(shè)計(jì)模式中的適配器模式在C++中的運(yùn)用,通常適配器模式可以細(xì)分為類適配器和對(duì)象適配器兩種情況,需要的朋友可以參考下
 

適配器模式屬于結(jié)構(gòu)型的設(shè)計(jì)模式,它是結(jié)構(gòu)型設(shè)計(jì)模式之首(用的最多的結(jié)構(gòu)型設(shè)計(jì)模式)。
適配器設(shè)計(jì)模式也并不復(fù)雜,適配器它是主要作用是將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口這樣使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。適配器模式有兩種:1.類的適配器 2.對(duì)象適配器,對(duì)象適配器更多一些。

示例:比如你在網(wǎng)上買了一個(gè)手機(jī),但是買家給你發(fā)回來了一個(gè)3接頭的充電器,但是恰好你又沒有3接頭的插槽,只有2個(gè)接口的插槽,于是你很直然地便會(huì)想到去找你個(gè)3接口轉(zhuǎn)兩接口的轉(zhuǎn)換器。簡單的分析下這個(gè)轉(zhuǎn)換器便是我們這里的適配器Adapter。三相插頭便是我們要適配的Adaptee,兩相插類適配器-----在我看來C++的類適配器的用多重繼承實(shí)現(xiàn),并提供適配后的接口。

設(shè)計(jì)模式,適配器模式,C++

這是你的三相插頭

class ThreePhaseOutlet { public:   void doThreePhasePlugin()   {     cout<<"三相插頭強(qiáng)勢(shì)插入!"<<endl;   } }; 

這是你想要的兩相插頭

class TwoPhaseOutlet  { public:   virtual void doPlugin() = 0; }; 

 
然后你將需要找到一個(gè)轉(zhuǎn)接頭,將三相插頭轉(zhuǎn)換為“兩相插頭”

class OutletConvertor: public TwoPhaseOutlet,public ThreePhaseOutlet { public:   void doPlugin()   {     doConvertor();     doThreePhasePlugin();   }       void doConvertor()   {     cout<<"三相插頭轉(zhuǎn)為兩廂插頭!"<<endl;   } }; 

現(xiàn)在你可以強(qiáng)勢(shì)插入兩相的插口了。

TwoPhaseOutlet* outlet = new OutletConvertor(); outlet->doPlugin(); 

對(duì)象適配器模式-----對(duì)象適配器是將需要適配的對(duì)象進(jìn)行包裝然后提供適配后的接口。

設(shè)計(jì)模式,適配器模式,C++

對(duì)象適配器的 三相插口和轉(zhuǎn)接頭的代碼和上面一致。只是整合步驟不一致

class OutletConvertor : public TwoPhaseOutlet { public:   void doPlugin()   {     doConvertor();     m_out.doThreePhasePlugin();   }   void doConvertor()   {     cout<<"三相插頭轉(zhuǎn)為兩廂插頭!"<<endl;   }   ThreePhaseOutlet m_out; }; 

對(duì)象適配器相比類適配器來說更加靈活,他可以選擇性適配自己想適配的對(duì)象。例如我們下面把代碼改成這樣,你也許就會(huì)明白為什么我這樣說:

class OutletConvertor : public TwoPhaseOutlet { public:   OutletConvertor(ThreePhaseOutlet out)   {     m_out = out;   }   void doPlugin()   {     doConvertor();     m_out.doThreePhasePlugin();   }   void doConvertor()   {     cout<<"三相插頭轉(zhuǎn)為兩廂插頭!"<<endl;   }   ThreePhaseOutlet m_out; }; 

我們?cè)跇?gòu)造的時(shí)候?qū)⒕唧w需要適配的適配對(duì)象傳入,這樣便可以根據(jù)傳入不同的對(duì)象,從而對(duì)該對(duì)象進(jìn)行適配。而類適配器卻無法選擇對(duì)象,他是對(duì)整個(gè)類進(jìn)行適配。也就是把所有的三相插口全部轉(zhuǎn)換為兩相的,而不是針對(duì)某一個(gè)。


在以下各種情況下使用適配器模式:

1、 系統(tǒng)需要使用現(xiàn)有的類,而此類的接口不符合系統(tǒng)的需要。 
2、 想要建立一個(gè)可以重復(fù)使用的類,用于與一些彼此之間沒有太大關(guān)聯(lián)的一些類,包括一些可能在將來引進(jìn)的類一起工作。這些源類不一定有很復(fù)雜的接口。 
3、 (對(duì)對(duì)象適配器而言)在設(shè)計(jì)里,需要改變多個(gè)已有子類的接口,如果使用類的適配器模式,就要針對(duì)每一個(gè)子類做一個(gè)適配器,而這不太實(shí)際。

Adapter模式在實(shí)現(xiàn)時(shí)有以下這些值得注意的地方:

1、 目標(biāo)接口可以省略,模式發(fā)生退化。但這種做法看似平庸而并不平庸,它可以使Adaptee不必實(shí)現(xiàn)不需要的方法(可以參考Default Adapter模式)。其表現(xiàn)形式就是父類實(shí)現(xiàn)缺省方法,而子類只需實(shí)現(xiàn)自己獨(dú)特的方法。這有些像模板(Template)模式。 
2、 適配器類可以是抽象類。 
3、 帶參數(shù)的適配器模式。使用這種辦法,適配器類可以根據(jù)參數(shù)返還一個(gè)合適的實(shí)例給客戶端。



發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 黄山市| 南皮县| 侯马市| 宜章县| 赣榆县| 固阳县| 象州县| 澜沧| 南投县| 齐河县| 成都市| 南川市| 苏尼特右旗| 邯郸县| 深州市| 囊谦县| 南澳县| 扬中市| 宁陕县| 尚志市| 秭归县| 灵宝市| 洪江市| 木里| 监利县| 宕昌县| 北票市| 漳平市| 西平县| 平昌县| 涟源市| 东明县| 南乐县| 东兰县| 无棣县| 贵阳市| 唐海县| 竹北市| 临泽县| 天津市| 荃湾区|