設計模式之組合模式

2021-08-04 17:57:22 字數 2162 閱讀 1411

組合模式

1.

組合模式:

將物件組合成樹形結構以表示

部分---

整體』的層次結構。組合模式使得使用者對單個物件和組合物件的使用具有一致性。

2.

組合模式:

為組合中的物件宣告介面,在適當情況下,實現所有類共有介面的預設行為。宣告介面用於訪問和管理

component

的子部件。通常用

add和

remove

方法提供增加或移除樹葉或樹枝的功能。

leaf

在組合中,表示葉節點物件,沒有子節點。

composite

定義有枝節點行為,用來儲存子部件,在

component

介面實現與子部件有關的操作。比如增加和移除。

2.

組合模式解釋:

為什麼

leaf

類中也有

add和

remove

,樹葉不是不可以再長分支嗎?

add和

remove

的叫透明方式

,也即是說,在

component

中宣告所有用來管理子物件的辦法,其中包括

add和

remove

等。這樣實現

component

介面的所有子類都具備了

add和

remove

。這樣做的好處就是葉節點和枝節點對外界沒有區別,它們具備完全一致的介面,因為

leaf

類本身不具備

add和

remove

方法,所以實現也沒有意義。

安全方式

:也就是在

component

介面中不去宣告

add和

remove

方法,那麼子類的

leaf

也就不需要去實現它,而是在

composite

宣告所有用來管理子類物件的方法,不過由於不透明,所以樹葉和樹枝不具有相同介面,客戶端需要做相應判斷,帶來了不便。

什麼地方用組合模式呢?

當發現需求中體現部分與整體層次的結構時,以及你希望使用者可以忽略組合物件與單個物件的不同,統一的使用組合結構中的所有物件時,就應該考慮。

4.

組合模式的例子:

例子

1:就如文件裡的文字,對單個字的處理和對多個字、甚至整個文件的處理,其實是一樣的,使用者希望一直對待,程式開發者也希望一致處理。

#include #include #include using namespace std;

class component

virtual void add(component *)=0;

virtual void remove(component *)=0;

virtual void display(int)=0;

};class leaf:public component

void add(component *c)

void add(component *c)

void remove(component *c)

iter++;

} }void display(int depth) }

};int main()

設計模式之組合模式

組合模式 以 整體 部分 的層次結構,將物件以樹型結構組合起來。如下圖所示 組合模式首先得定義乙個用來管理和訪問部件們的抽象類。public abstract class equipment 再建立乙個組合體的部件 class element equipment 現在我們再來定義乙個組合體,也就是組...

設計模式之 組合模式

有時候我們需要維護一些物件,這些物件具有一定的層次結構,它們之間雖然差異很大,但在使用的時候我們希望能構一致的對待,比如windows控制項,繪圖中的圖形等,這個時候我們就可以採用組合模式來進行管理。組合模式就是將要管理的物件按樹型結構來進行組織,表示成一種 整體 部分 的層次結構,使得使用者對單個...

設計模式之組合模式

組合模式 將物件組合成樹形結構以表示 部分 整體 的層次結構。使得使用者對單個物件和組合物件的使用具有一致性。適用性 想表示物件的部分 整體層次結構,希望使用者忽略組合物件與單個物件的不同,使用者將統一地使用組合結構中的所有物件。典型表示結構圖 宣告組合中的物件宣告介面 在適當的情況下,實現所有類共...