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

C++設(shè)計(jì)模式之組合模式(Composite)

 更新時(shí)間:2021年09月03日 16:19:54   作者:chencarl  
這篇文章主要為大家詳細(xì)介紹了C++設(shè)計(jì)模式之組合模式Composite,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

組合模式為了描述分支包含關(guān)系,也就是我們說(shuō)的樹形關(guān)系,其對(duì)象分為枝和葉,每一枝可包含枝和葉,直到全部為葉節(jié)點(diǎn)。我們對(duì)枝和葉進(jìn)行行為抽象,可認(rèn)為枝和葉都是Component,而葉是最小的操作單元,其下不存在枝和葉,而枝作為Composite里面存有其下枝和葉的組件列表。

作用

將對(duì)象組合成樹形結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu),使得用戶對(duì)單個(gè)對(duì)象和組合對(duì)象的使用具有一致性

類視圖

實(shí)現(xiàn)

#include <iostream>
#include <list>
#include <string>
using namespace std;
class menu
{
public:
  menu(string in) : name(in){}
  ~menu(){}
  virtual void Add(menu*) = 0;
  virtual void Remove(menu*) = 0;
  virtual void showname() = 0;
protected:
  string name;
};

class Leafmenu : public menu
{
public:
  Leafmenu(string in) : menu(in){}
  ~Leafmenu(){}
  void showname()
  {
    cout<< "Leaf : " << name << endl;
  }
  virtual void Add(menu*){}
  virtual void Remove(menu*){}
};

class Compositemenu : public menu
{
public:
  Compositemenu(string in) : menu(in){}
  void showname()
  {
    cout<< "Composit : "<< name << endl;
    list<menu*>::iterator iter = m_child.begin();
    while (iter != m_child.end())
    {
      (*iter)->showname();
      iter++;
    }
  }
  virtual void Add(menu*m){ m_child.push_back(m); }
  virtual void Remove(menu*m){ m_child.remove(m); }
private:
  list<menu*> m_child;
};
//調(diào)用實(shí)現(xiàn)
int main
{
  Compositemenu mainmenu("Main");

  /***添加File菜單****/
  Compositemenu *pFile = new Compositemenu("File");
  Leafmenu *pNew = new Leafmenu("New");
  Leafmenu *pOpen = new Leafmenu("Open");
  Leafmenu *pClose = new Leafmenu("Close");
  pFile->Add(pNew);
  pFile->Add(pOpen);
  pFile->Add(pClose);
  mainmenu.Add(pFile);

  /***添加Edit菜單****/
  Compositemenu *pEdit = new Compositemenu("Edit");
  Leafmenu *pCopy = new Leafmenu("Copy");
  Leafmenu *pPaste = new Leafmenu("Paste");
  pEdit->Add(pCopy);
  pEdit->Add(pPaste);
  mainmenu.Add(pFile);

  Leafmenu *pExit = new Leafmenu("Exit");
  Leafmenu *pHelp = new Leafmenu("Help");
  mainmenu.Add(pExit);
  mainmenu.Add(pHelp);

  mainmenu.showname();

  delete pNew;
  delete pOpen;
  delete pClose;
  delete pFile;
  delete pCopy;
  delete pPaste;
  delete pEdit;
  delete pExit;
  delete pHelp;
}

關(guān)于葉對(duì)節(jié)點(diǎn)的操作方法,如上面例子中add、remove、get等,其實(shí)是不需要的,因?yàn)榛惿昝鞯氖羌兲摵瘮?shù),所以必須進(jìn)行實(shí)現(xiàn),但是在調(diào)用時(shí)沒(méi)有任何意義,這就帶來(lái)了一些使用的風(fēng)險(xiǎn),安全的做法是將這些操作從基類中移除,添加到composite類中,這樣在編譯時(shí)就可以檢查到調(diào)用問(wèn)題,不過(guò)這樣做顯然又阻礙了接口的一致性,權(quán)衡利弊的選擇還需自己根據(jù)需要來(lái)。

應(yīng)用場(chǎng)景

常用的樹形結(jié)構(gòu)操作,如文件結(jié)構(gòu)、菜單、組織結(jié)構(gòu)等

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++中平衡二叉搜索樹的模擬實(shí)現(xiàn)

    C++中平衡二叉搜索樹的模擬實(shí)現(xiàn)

    二叉搜索樹雖可以縮短查找的效率,但如果數(shù)據(jù)有序或接近有序二叉搜索樹將退化為單支樹,查找元素相當(dāng)于在順序表中搜索元素,效率低下,所以本文給大家介紹了C++平衡二叉的搜索樹模擬實(shí)現(xiàn)方法,需要的朋友可以參考下
    2023-09-09
  • 深入理解C++中常見(jiàn)的關(guān)鍵字含義

    深入理解C++中常見(jiàn)的關(guān)鍵字含義

    本篇文章是對(duì)C++中常見(jiàn)關(guān)鍵字的含義進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 使用Visual Studio 2010/2013編譯V8引擎步驟分享

    使用Visual Studio 2010/2013編譯V8引擎步驟分享

    這篇文章主要介紹了使用Visual Studio 2013編譯V8引擎步驟分享,需要的朋友可以參考下
    2015-08-08
  • C++實(shí)現(xiàn)推箱子小游戲源碼

    C++實(shí)現(xiàn)推箱子小游戲源碼

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)推箱子小游戲源碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • C++中關(guān)于this指針的入門介紹

    C++中關(guān)于this指針的入門介紹

    this?指針在C++類和對(duì)象中是個(gè)很方便實(shí)用的關(guān)鍵字,可以簡(jiǎn)化對(duì)象成員屬性的調(diào)用,使代碼表達(dá)的含義更加準(zhǔn)確;在之前的學(xué)習(xí)中我們都可以判斷變量所占內(nèi)存空間大小,那么我們創(chuàng)建的類對(duì)象所占的內(nèi)存空間怎么計(jì)算呢?想知道this的妙用和類對(duì)象占用的內(nèi)存空間就來(lái)跟我學(xué)習(xí)吧
    2022-07-07
  • C++?LeetCode0547題解省份數(shù)量圖的連通分量

    C++?LeetCode0547題解省份數(shù)量圖的連通分量

    這篇文章主要為大家介紹了C++?LeetCode0547題解省份數(shù)量圖的連通分量示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • 華為機(jī)試題之統(tǒng)計(jì)單詞個(gè)數(shù)實(shí)例代碼

    華為機(jī)試題之統(tǒng)計(jì)單詞個(gè)數(shù)實(shí)例代碼

    這篇文章主要介紹了華為機(jī)試題之統(tǒng)計(jì)單詞個(gè)數(shù)實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • C++位圖的實(shí)現(xiàn)原理與方法

    C++位圖的實(shí)現(xiàn)原理與方法

    位圖(bitset)是一種常用的數(shù)據(jù)結(jié)構(gòu),常用在給一個(gè)很大范圍的數(shù),判斷其中的一個(gè)數(shù)是不是在其中。這篇文章主要給大家介紹了關(guān)于C++位圖以及位圖的實(shí)現(xiàn)原理與方法,需要的朋友可以參考下
    2021-05-05
  • Qt實(shí)現(xiàn)小功能之圓形進(jìn)度條的方法詳解

    Qt實(shí)現(xiàn)小功能之圓形進(jìn)度條的方法詳解

    在Qt自帶的控件中,只有垂直進(jìn)度條、水平進(jìn)度條兩種。在平時(shí)做頁(yè)面開發(fā)時(shí),有些時(shí)候會(huì)用到圓形進(jìn)度條,比如說(shuō):下載某個(gè)文件的下載進(jìn)度。本文就來(lái)實(shí)現(xiàn)一個(gè)圓形進(jìn)度條,需要的可以參考一下
    2022-10-10
  • c語(yǔ)言實(shí)現(xiàn)http下載器的方法

    c語(yǔ)言實(shí)現(xiàn)http下載器的方法

    這篇文章主要介紹了c語(yǔ)言實(shí)現(xiàn)http下載器的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-07-07

最新評(píng)論

合作市| 浏阳市| 定南县| 琼海市| 祁阳县| 邢台市| 霍州市| 皮山县| 喀喇沁旗| 来宾市| 石林| 鹰潭市| 甘南县| 鄂温| 沙坪坝区| 新泰市| 巴林右旗| 新郑市| 鄂伦春自治旗| 洪湖市| 杨浦区| 大邑县| 竹北市| 浦江县| 都江堰市| 钟祥市| 博湖县| 白玉县| 讷河市| 灯塔市| 合阳县| 遂平县| 页游| 合山市| 海兴县| 丰顺县| 铜山县| 甘肃省| 邮箱| 天津市| 安平县|