組合模式:將物件組合成樹形結構以表示「部分-整體」的層次結構。使得使用者對單個物件和組合物件的使用具有一致性。
適用性:想表示物件的部分-整體層次結構,希望使用者忽略組合物件與單個物件的不同,使用者將統一地使用組合結構中的所有物件。
典型表示結構圖:
宣告組合中的物件宣告介面;在適當的情況下,實現所有類共有介面的預設行為;宣告乙個介面用於訪問和管理component的子元件;(可選)在遞迴結構中定義乙個介面,用於訪問乙個父部件,並在適當情況下實現它。
leaf:
在組合中表示葉節點物件,葉節點沒有子節點;在組合中定義圖元物件的行為。
composite:
定義有子部件的那些部件的行為;儲存子部件;在component介面操縱組合部件的物件。
client:
通過component介面操縱組合部件物件。
協作:使用者使用component類介面與組合結構中的物件進行互動。如果接收者是乙個葉節點,則直接處理請求。如果接收者是composite,它通常將請求傳送給它的子部件,在**請求之前與之後可能執行一些輔助操作。
效果定義了包含基本物件和組合物件的類層次結構;簡化客戶**;使得更容易增加新型別的元件;設計更一般化.
**(**木有考慮記憶體洩露,,木有釋放記憶體- -
#include #include #include #include #include using namespace std;
class company
string name() const
virtual void add(company* c) = 0;
virtual void remove(company* c) = 0;
virtual void display(int depth) const = 0 ;
virtual void lineofduty() const = 0;
private:
string _name;
};class concretecompany : public company
void add(company* c)
void remove(company* c)
void display(int depth) const
*/for_each(children.begin(), children.end(), bind2nd(mem_fun(&company::display), depth+2));
} void lineofduty() const
*/for_each(children.begin(), children.end(), mem_fun(&company::lineofduty));
}protected:
private:
vectorchildren;
};//人力資源部
class hrdeaprtment : public company
void add(company* c)
void remove(company* c)
void display(int depth) const
void lineofduty() const };
//財務部
class financedeaprtment : public company
void add(company* c)
void remove(company* c)
void display(int depth) const
void lineofduty() const
};
#include "composite.h"
int main()
設計模式之組合模式
組合模式 以 整體 部分 的層次結構,將物件以樹型結構組合起來。如下圖所示 組合模式首先得定義乙個用來管理和訪問部件們的抽象類。public abstract class equipment 再建立乙個組合體的部件 class element equipment 現在我們再來定義乙個組合體,也就是組...
設計模式之 組合模式
有時候我們需要維護一些物件,這些物件具有一定的層次結構,它們之間雖然差異很大,但在使用的時候我們希望能構一致的對待,比如windows控制項,繪圖中的圖形等,這個時候我們就可以採用組合模式來進行管理。組合模式就是將要管理的物件按樹型結構來進行組織,表示成一種 整體 部分 的層次結構,使得使用者對單個...
設計模式之組合模式
1 組合模式 composite 將物件組合成樹形結構已表示 部分 整體 的層次結構。組合模式使得使用者對單個物件和組合物件的使用具有一致性。uml圖如下 2 組合模式的透明方式與安全方式 1 透明方法 也就是說在component中宣告所有用來管理子物件的方法,其中包括add,remove等。這樣...