設計模式之組合模式

2021-06-21 03:59:08 字數 1957 閱讀 8637

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

適用性:想表示物件的部分-整體層次結構,希望使用者忽略組合物件與單個物件的不同,使用者將統一地使用組合結構中的所有物件。

典型表示結構圖:

宣告組合中的物件宣告介面;在適當的情況下,實現所有類共有介面的預設行為;宣告乙個介面用於訪問和管理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等。這樣...