設計模式之組合模式

2021-06-22 16:45:12 字數 2298 閱讀 3800

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

uml圖如下:

2、組合模式的透明方式與安全方式

1)透明方法:

也就是說在component中宣告所有用來管理子物件的方法,其中包括add,remove等。這樣實現component介面所有的子類都具備了add和remove。

這樣做的好處就是葉節點和枝節點對於外界沒有區別,它們具備完全一致的行為介面,但問題也很明顯。因為leaf類本身不具備add(),remove方法的功能,所以實現它是沒有意義的。

2)安全方法:

也就是在component介面中不去宣告add和remove方法,那麼子類的leaf也就不需要去實現它,而是在composite宣告所有用來管理子類物件的方法,這樣的做就不會出現剛才提出的問題,由於不夠透明,所以樹葉和樹枝類將不具有相同的介面,客戶端的呼叫需要做相應的判斷,帶來了不便。

3、如何使用組合模式?

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

4、組合模式的好處?

答:組合模式定義了包含基本物件,組合物件的類層次結構,基本物件可以被組合成更複雜的組合物件,而這個組合物件又可以被組合,這樣不斷地遞迴下去,客戶**中,任何用到基本物件的地方都可以使用組合物件。使用者不用關心到底是處理乙個葉節點還是處理乙個組合元件。也就用不著為定義組合而寫一些選擇判斷語句了。組合模式讓客戶可以一致地使用組合結構和單個物件。

5、c++**實現

[cpp]view plain

copy

#include 

#include 

#include 

#include 

using

namespace

std;  

/*component為組合中的物件宣告介面,在適當情況下,

實現所有類共有介面的預設行為。宣告乙個介面用於

訪問和管理component的子部件

*/class

component  

;  component::component(string name)   

/*leaf在組合中表示葉節點物件,葉節點沒有

子節點。

*/class

leaf : 

public

component  

void

add(component *);  

void

remove(component *);  

void

display(

int);  

};  

/*由於葉子沒有增加分枝和樹葉,所以add和remove方法實現它沒有意義,

但這樣做可以消除葉節點和枝節點物件在抽象層次的區別,它們具有

完全一致的介面。

*/void

leaf::add(component * p_c)  

void

leaf::remove(component * p_c)  

/*葉子節點的具體方法,此處是顯示器名稱和級別

*/void

leaf::display(

intdepth)  

cout <

}  /*

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

在component介面中實現與子部件有關的操作,

比如增加add和刪除remove。

*/class

composite : 

public

component  

void

add(component *);  

void

remove(component *);  

void

display(

int);  

};  

void

composite::add(component * p_c)  

void

composite::remove(component * p_c)  

/*顯示節點名稱並對其下級進行遍歷

*/void

composite::display(

intdepth)  

cout <

intcnt = v.size();  

for(

inti = 0; i 

}  int

main()    

設計模式之組合模式

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

設計模式之 組合模式

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

設計模式之組合模式

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