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