欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

201639180223272.jpg (542×198)

這是你的三相插頭

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)行包裝然后提供適配后的接口。

201639180653299.jpg (528×198)

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

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

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

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)行適配。而類(lèi)適配器卻無(wú)法選擇對(duì)象,他是對(duì)整個(gè)類(lèi)進(jìn)行適配。也就是把所有的三相插口全部轉(zhuǎn)換為兩相的,而不是針對(duì)某一個(gè)。


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

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

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

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

相關(guān)文章

  • C++ LeeCode題目:比特位計(jì)數(shù)和買(mǎi)賣(mài)股票的最佳時(shí)機(jī)

    C++ LeeCode題目:比特位計(jì)數(shù)和買(mǎi)賣(mài)股票的最佳時(shí)機(jī)

    這篇文章主要介紹了基于C語(yǔ)言計(jì)算比特位計(jì)數(shù)和買(mǎi)賣(mài)股票的最佳時(shí)機(jī),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-07-07
  • 淺談C++的幾種從鍵盤(pán)輸入方式

    淺談C++的幾種從鍵盤(pán)輸入方式

    今天小編就為大家分享一篇淺談C++的幾種從鍵盤(pán)輸入方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • MATLAB Delaunay算法提取離散點(diǎn)邊界的方法

    MATLAB Delaunay算法提取離散點(diǎn)邊界的方法

    這篇文章主要為大家詳細(xì)介紹了MATLAB Delaunay算法提取離散點(diǎn)邊界的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • C++IO流之fstream,?stringstream使用小結(jié)

    C++IO流之fstream,?stringstream使用小結(jié)

    C語(yǔ)言中常用的輸入輸出函數(shù)有如下幾種:前者是格式化標(biāo)準(zhǔn)輸入輸出,后者是格式化文件輸入輸出,最后是格式化字符串輸入輸出,這篇文章主要介紹了C++IO流:fstream,?stringstream總結(jié),需要的朋友可以參考下
    2022-04-04
  • C++編程中指針的聲明與基本使用講解

    C++編程中指針的聲明與基本使用講解

    這篇文章主要介紹了詳解C++編程中C++編程中指針的聲明與基本使用講解,文中舉了簡(jiǎn)單的例子來(lái)講如何在基本的數(shù)據(jù)結(jié)構(gòu)中使用指針,以及固定和可變指針的介紹,需要的朋友可以參考下
    2016-01-01
  • C++類(lèi)中的繼承實(shí)例詳解

    C++類(lèi)中的繼承實(shí)例詳解

    這篇文章主要介紹了C++類(lèi)中的繼承實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • 詳解C++之C++11的牛逼特性

    詳解C++之C++11的牛逼特性

    這篇文章主要介紹了C++之C++11的牛逼特性,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2020-09-09
  • opencv實(shí)現(xiàn)讀取視頻保存視頻

    opencv實(shí)現(xiàn)讀取視頻保存視頻

    這篇文章主要為大家詳細(xì)介紹了opencv實(shí)現(xiàn)讀取視頻保存視頻,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • OpenCV實(shí)現(xiàn)給圖片添加邊框功能

    OpenCV實(shí)現(xiàn)給圖片添加邊框功能

    這篇文章主要為大家詳細(xì)介紹了OpenCV實(shí)現(xiàn)給圖片添加邊框功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • 2~62位任意進(jìn)制轉(zhuǎn)換方法(c++)

    2~62位任意進(jìn)制轉(zhuǎn)換方法(c++)

    下面小編就為大家?guī)?lái)一篇2~62位任意進(jìn)制轉(zhuǎn)換方法(c++)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06

最新評(píng)論