C++設(shè)計(jì)模式之適配器模式怎么實(shí)現(xiàn)

這篇文章主要介紹“C++設(shè)計(jì)模式之適配器模式怎么實(shí)現(xiàn)”,在日常操作中,相信很多人在C++設(shè)計(jì)模式之適配器模式怎么實(shí)現(xiàn)問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”C++設(shè)計(jì)模式之適配器模式怎么實(shí)現(xiàn)”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到東安網(wǎng)站設(shè)計(jì)與東安網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、申請(qǐng)域名虛擬主機(jī)、企業(yè)郵箱。業(yè)務(wù)覆蓋東安地區(qū)。

適配器模式顧名思義在于接口的轉(zhuǎn)換,最形象的例子就如兩口轉(zhuǎn)三口電源適配器,口子的數(shù)量可以理解為參數(shù)數(shù)量,一如我們調(diào)用三個(gè)參數(shù)的接口,而提供的接口只有兩個(gè)參數(shù),那么久需要適配器類進(jìn)行接口的擴(kuò)展改造,這就是適配器模式存在的最主要意義。

作用

將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口,使得原本由于接口不兼容而不能一起工作的那些類可以一起工作,使控制范圍之外的一個(gè)原有對(duì)象與某個(gè)接口匹配。適配器模式主要應(yīng)用于希望復(fù)用一些現(xiàn)存的類,但是接口又與復(fù)用環(huán)境要求不一致的情況。
想使用一個(gè)已經(jīng)存在的類,但如果它的接口,也就是它的方法和你的要求不相同時(shí),就應(yīng)該考慮用適配器模式。

類視圖

類模式適配器

C++設(shè)計(jì)模式之適配器模式怎么實(shí)現(xiàn)

對(duì)象模式適配器

C++設(shè)計(jì)模式之適配器模式怎么實(shí)現(xiàn)

代碼實(shí)現(xiàn)

//目標(biāo)接口類,客戶需要的接口
class Target
{
public:
  Target(){}
  virtual ~Target(){}
  virtual void Request()//定義新的標(biāo)準(zhǔn)接口
  {
    cout << "Request" << endl;
  }
};

//需要適配的類
class Object
{
public:
  Object(){}
  ~Object(){}
  void SpecificRequest()
  {
    cout << "SpecificRequest" << endl;
  }
};

//類模式,適配器類,通過(guò)public繼承獲得接口繼承的效果,通過(guò)private繼承獲得實(shí)現(xiàn)繼承的效果
class Adapter :public Target, private Object
{
public:
  Adapter(){}
  ~Adapter(){}
  virtual void Request()//實(shí)現(xiàn)Target定義的Request接口
  {
    cout << "AdapterRequest" << endl;
    this->SpecificRequest();
    cout << "----------------------------" << endl;
  }
};

//對(duì)象模式,適配器類,繼承Target類,采用組合的方式實(shí)現(xiàn)Object的復(fù)用
class Adapter1 :public Target
{
public:
  Adapter1(Object* adaptee) :_adaptee(adaptee)
  {}
  Adapter1() :_adaptee(new Object)
  {}
  ~Adapter1(){}
  virtual void Request()//實(shí)現(xiàn)Target定義的Request接口
  {
    cout << "Adapter1Request" << endl;
    _adaptee->SpecificRequest();
    cout << "----------------------------" << endl;
  }
private:
  Object* _adaptee;
};

//client調(diào)用
int main()
{
  //類模式Adapter
  Target* pTarget = new Adapter();
  pTarget->Request();

  //對(duì)象模式Adapter1
  Adaptee* ade = new Adaptee();
  Target* pTarget1= new Adapter1(ade);
  pTarget1->Request();

  //對(duì)象模式Adapter2
  Target* pTarget2 = new Adapter1();
  pTarget2->Request();

  return 0;
}

在Adapter模式的兩種模式中,有一個(gè)很重要的概念就是接口繼承和實(shí)現(xiàn)繼承的區(qū)別和聯(lián)系。接口繼承和實(shí)現(xiàn)繼承是面向?qū)ο箢I(lǐng)域的兩個(gè)重要的概念,接口繼承指的是通過(guò)繼承,子類獲得了父類的接口,而實(shí)現(xiàn)繼承指的是通過(guò)繼承子類獲得了父類的實(shí)現(xiàn)(并不統(tǒng)共接口)。在C++中的public繼承既是接口繼承又是實(shí)現(xiàn)繼承,因?yàn)樽宇愒诶^承了父類后既可以對(duì)外提供父類中的接口操作,又可以獲得父類的接口實(shí)現(xiàn)。當(dāng)然我們可以通過(guò)一定的方式和技術(shù)模擬單獨(dú)的接口繼承和實(shí)現(xiàn)繼承,例如我們可以通過(guò)private繼承獲得實(shí)現(xiàn)繼承的效果(private繼承后,父類中的接口都變?yōu)閜rivate,當(dāng)然只能是實(shí)現(xiàn)繼承了。),通過(guò)純抽象基類模擬接口繼承的效果,但是在C++中pure virtual function也可以提供默認(rèn)實(shí)現(xiàn),因此這是不純正的接口繼承,但是在Java中我們可以interface來(lái)獲得真正的接口繼承了。

到此,關(guān)于“C++設(shè)計(jì)模式之適配器模式怎么實(shí)現(xiàn)”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

網(wǎng)站標(biāo)題:C++設(shè)計(jì)模式之適配器模式怎么實(shí)現(xiàn)
網(wǎng)站路徑:http://muchs.cn/article14/ghgpde.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、做網(wǎng)站網(wǎng)站營(yíng)銷、微信小程序、App開(kāi)發(fā)、建站公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)