生活随笔
收集整理的這篇文章主要介紹了
最常用的设计模式---适配器模式(C++实现)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
適配器模式屬于結構型的設計模式,它是結構型設計模式之首(用的最多的結構型設計模式)。
適配器設計模式也并不復雜,適配器它是主要作用是將一個類的接口轉換成客戶希望的另外一個接口這樣使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。適配器模式有兩種:1.類的適配器 2.對象適配器,對象適配器更多一些。
(適配器模式和裝飾模式很類似,下面一篇我們會學習裝飾者模式,并分析他們之間的區別)
示例:比如你在網上買了一個手機,但是買家給你發回來了一個3接頭的充電器,但是恰好你又沒有3接頭的插槽,只有2個接口的插槽,于是你很直然地便會想到去找你個3接口轉兩接口的轉換器。簡單的分析下這個轉換器便是我們這里的適配器Adapter。三相插頭便是我們要適配的Adaptee,兩相插
類適配器
-----在我看來C++的類適配器的用多重繼承實現,并提供適配后的接口。
這是你的三相插頭
[cpp]?view plain
?copyclass?ThreePhaseOutlet??{??public:??????void?doThreePhasePlugin()??????{??????????cout<<"三相插頭強勢插入!"<<endl;??????}??};??
這是你想要的兩相插頭
[cpp]?view plain
?copyclass?TwoPhaseOutlet???{??public:??????virtual?void?doPlugin()?=?0;??};??
然后你將需要找到一個轉接頭,將三相插頭轉換為“兩相插頭”
[cpp]?view plain
?copyclass?OutletConvertor:?public?TwoPhaseOutlet,public?ThreePhaseOutlet??{??public:??????void?doPlugin()??????{??????????doConvertor();??????????doThreePhasePlugin();??????}?????????????void?doConvertor()??????{??????????cout<<"三相插頭轉為兩廂插頭!"<<endl;??????}??};??
現在你可以強勢插入兩相的插口了。
[cpp]?view plain
?copyTwoPhaseOutlet*?outlet?=?new?OutletConvertor();??outlet->doPlugin();??
對象適配器模式-----對象適配器是將需要適配的對象進行包裝然后提供適配后的接口。
對象適配器的 三相插口和轉接頭的代碼和上面一致。只是整合步驟不一致
[cpp]?view plain
?copyclass?OutletConvertor?:?public?TwoPhaseOutlet??{??public:??????void?doPlugin()??????{??????????doConvertor();??????????m_out.doThreePhasePlugin();??????}??????void?doConvertor()??????{??????????cout<<"三相插頭轉為兩廂插頭!"<<endl;??????}??????ThreePhaseOutlet?m_out;??};??
對象適配器相比類適配器來說更加靈活,他可以選擇性適配自己想適配的對象。例如我們下面把代碼改成這樣,你也許就會明白為什么我這樣說:
[cpp]?view plain
?copyclass?OutletConvertor?:?public?TwoPhaseOutlet??{??public:??????OutletConvertor(ThreePhaseOutlet?out)??????{??????????m_out?=?out;??????}??????void?doPlugin()??????{??????????doConvertor();??????????m_out.doThreePhasePlugin();??????}??????void?doConvertor()??????{??????????cout<<"三相插頭轉為兩廂插頭!"<<endl;??????}??????ThreePhaseOutlet?m_out;??};??
我們在構造的時候將具體需要適配的適配對象傳入,這樣便可以根據傳入不同的對象,從而對該對象進行適配。而類適配器卻無法選擇對象,他是對整個類進行適配。也就是把所有的三相插口全部轉換為兩相的,而不是針對某一個。
總結
以上是生活随笔為你收集整理的最常用的设计模式---适配器模式(C++实现)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。