設計模式 組合模式

2021-06-16 07:03:09 字數 3205 閱讀 8572

1、menucomponent.h

#ifndef menucomponent_h

#define menucomponent_h

#include class menucomponent //組合物件基類component

;//建構函式

menucomponent(std::string strname):m_strname(strname){};//建構函式

virtual ~menucomponent(){};//析構函式

virtual void add(menucomponent*){};//新增乙個

virtual void remove(menucomponent*){};//移除乙個

virtual menucomponent* getchild(int);//訪問乙個

virtual void display() = 0;//操作,operation

protected:

std::string m_strname;

};#endif // menucomponent_h

2-1、menucomposite.h

#ifndef menucomposite_h

#define menucomposite_h

#include "menucomponent.h"

#include #include using namespace std;

class menucomposite : public menucomponent //組合物件子元件composite(樹枝)

;#endif // menucomposite_h

2-2、menucomposite.cpp

#include "menucomposite.h"

menucomposite::menucomposite()

menucomposite::menucomposite(string strname) : menucomponent(strname)

menucomposite::~menucomposite()

void menucomposite::add(menucomponent* pmenu)

void menucomposite::remove(menucomponent* pmenu)

}m_vmenu.erase(m_vmenu.begin()+pos);

}menucomponent* menucomposite::getchild(int index)

void menucomposite::display()

}

3-1、menuleaf.h

#ifndef menuleaf_h

#define menuleaf_h

#include "menucomponent.h"

#include using namespace std;

class menuleaf : public menucomponent//組合物件的葉子節點leaf(樹葉)

;#endif // menuleaf_h

3-2、menuleaf.cpp

#include "menuleaf.h"

menuleaf::menuleaf()

menuleaf::menuleaf(string strname) : menucomponent(strname)

menuleaf::~menuleaf()

void menuleaf::display()

4、main.cpp

/*

開發ide:qt creater

開發環境:qt c++

參考**:神秘果:

定義:將物件組合成樹形結構以表示「部分-整體」的層次結構。組合(composite)模式使得使用者對單個物件和組合物件的使用具有一致性。

理解:1.component是組合物件的基類,定義了類的公共方法;提供乙個訪問和管理子元件的方法。

管理子元件的方法:add-新增子元件;remove-移除子元件;getchild-遍歷獲取組建物件的指標。

operation是需要子元件具體定義的公共介面。

2.leaf是組合物件的葉子節點(樹葉),葉子節點沒有子元件(也就沒有管理子元件的方法),只有公共行為方法operation。

3.composite是具體的子元件類(樹枝),實現基類介面,要有管理子元件的方法,它可以繼續派生子元件或者葉子節點。

4.client通過component基類來操作組合物件。

要點:1.組合模式提供了一種解決物件之間遞迴組合的解決辦法。組合物件包含兩種派生類:包含子元件的樹枝(composite)和

葉子元件的樹葉(leaf)。這樣組合物件就可以繼續組合物件,形成複雜的組合物件應用。

2.最大化組合物件基類component。客戶是不知道具體物件呼叫的是leaf還是composite。為了達到這個目的,

基類component的方法就要最大化,並且提供預設實現,leaf和composite根據實際情況來重新實現。

應用:多級選單的實現可以使用組合模式,原始碼例子中就是這樣的實現。

以上文字說明,從網上整理而來,有可能部分與其他同仁相同,請諒解,希望我們能夠共同交流,謝謝!

*/#include "menucomposite.h"

#include "menuleaf.h"

int main(int argc, char *argv)

執行結果:

=== jhluroom start *****===

this is a menucomposite:國內新聞

this is a menuleaf:時事新聞

this is a menuleaf:社會新聞

+國內新聞

|-時事新聞

|-社會新聞

this is a menucomposite:國際新聞

this is a menuleaf:國際要聞

this is a menuleaf:環球視野

+國際新聞

|-國際要聞

|-環球視野

=== jhluroom finish _^_ ===

組合模式 設計模式 組合模式

1.需求分析 假設要給乙個大公司做辦公管理系統,公司有人力資源部 財務部等,然後公司在其他城市還有分公司,分公司也有自己的人力資源部 財務部等,要求總公司 分公司以及各部分成樹狀結構管理。要完成這麼乙個系統,為了有乙個更好的設計,方便開發的展開,就需要了解乙個設計模式 組合模式。2.定義 將物件組合...

設計模式 組合模式 組合模式使用

目錄 組合模式概括 組合模式使用場景 定義 將物件組合成樹形結構以表示 部分 整體 的層次結構 作用 使客戶端對單個物件和組合物件保持一致的處理方式 使用場景 1.希望客戶端可以忽略組合物件與單個物件的差異時 2.處理乙個樹形結構時 優點 清楚的定義分層次的複雜物件,表示物件的全部或部分層次 讓客戶...

設計模式 組合設計模式

組合模式 composite pattern 又稱部分整體模式,用於把一組相似的物件當做乙個單一的物件,組合模式依據樹形來組合物件,用來表示部分以及整體層次,為結構型設計模式,它建立來物件組的樹形結構。意圖 將物件組合成樹形結構以表示 部分 整體 的結構層次,組合模式使得使用者對單個物件和組合物件的...