最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2016年03月09日 18:10:51   作者:黃花寒  
這篇文章主要介紹了設(shè)計模式中的適配器模式在C++中的運用,通常適配器模式可以細分為類適配器和對象適配器兩種情況,需要的朋友可以參考下

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

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

201639180223272.jpg (542×198)

這是你的三相插頭

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

這是你想要的兩相插頭

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

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

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

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

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

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

201639180653299.jpg (528×198)

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

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

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

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; 
}; 

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


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

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

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

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

相關(guān)文章

最新評論

明光市| 洪江市| 彩票| 原阳县| 渭南市| 康保县| 肥乡县| 饶河县| 小金县| 武陟县| 赫章县| 平罗县| 广丰县| 千阳县| 彰化县| 盱眙县| 汉阴县| 永定县| 鄂伦春自治旗| 都江堰市| 澜沧| 白河县| 宁都县| 德江县| 邵东县| 龙陵县| 曲松县| 府谷县| 兴义市| 新乐市| 定南县| 黄石市| 曲水县| 将乐县| 鲁甸县| 舟曲县| 平泉县| 山丹县| 庄浪县| 潜山县| 屯留县|