名詞解釋:
組合模式:將物件組合成樹形結構以表示『部分-整體』的層次結構。組合模式使得使用者對單個物件和組合物件的使用具有一致性。
必需元素:
1.組合中的物件的介面(component),在適當情況下,實現所有類共有介面的預設行為。在類中定義一些用於訪問和管理component子部件;
2.在組合中表示葉節點物件的類(葉節點木有子節點);
3.定義有枝節點行為,可以儲存子部件的類。(會實現component中關於子部件操作的方法,一般為add和remove)
上例子:
component,節點抽象類:
//////部件的抽象類
/// abstract
class
component
//////
新增節點
/// ///
public
abstract
void
add(component c);
//////
移除節點
/// ///
public
abstract
void
remove(component c);
//////
顯示節點
/// ///
public
abstract
void display(int
depth);
}
leaf,沒有子節點的部件:
classleaf:component
public
override
void
add(component c)
public
override
void
remove(component c)
public
override
void display(int
depth)
}
composite,有子節點操作的部件:
classcomposite:component
public
override
void
add(component c)
public
override
void
remove(component c)
public
override
void display(int
depth)
}}
呼叫:
//定義乙個更節電
composite root = new composite("
root");
//向根節點中新增兩個節點
root.add(new leaf("
leaf a
"));
root.add(
new leaf("
leaf b
"));
composite comp = new composite("
composite x");
comp.add(
new leaf("
leaf xa
"));
comp.add(
new leaf("
leaf xb
"));
//向根節點中新增含有子節點的節點
root.add(comp);
composite comp2 = new composite("
composite xy");
comp2.add(
new leaf("
leaf xya
"));
comp2.add(
new leaf("
leaf xyb
"));
//向子節點中新增含有子節點的節點
comp.add(comp2);
root.add(
new leaf("
leaf c
"));
//顯示根節點
root.display(1
); console.read();
總結:
當你發現需求中是體現部分與整體層次的結構時,以及你希望使用者可以忽略組合物件與單個物件的不同,統一地使用組合結構中的所有物件時,就應該考慮用組合模式。組合模式的好處是使用者不用關心到底是處理乙個節點還是處理乙個組合組建,也就不用為定義組合而寫一些判斷,也就是說組合模式讓客戶可以一致地使用組合結構和單個物件。
設計模式之組合模式
組合模式 以 整體 部分 的層次結構,將物件以樹型結構組合起來。如下圖所示 組合模式首先得定義乙個用來管理和訪問部件們的抽象類。public abstract class equipment 再建立乙個組合體的部件 class element equipment 現在我們再來定義乙個組合體,也就是組...
設計模式之 組合模式
有時候我們需要維護一些物件,這些物件具有一定的層次結構,它們之間雖然差異很大,但在使用的時候我們希望能構一致的對待,比如windows控制項,繪圖中的圖形等,這個時候我們就可以採用組合模式來進行管理。組合模式就是將要管理的物件按樹型結構來進行組織,表示成一種 整體 部分 的層次結構,使得使用者對單個...
設計模式之組合模式
組合模式 將物件組合成樹形結構以表示 部分 整體 的層次結構。使得使用者對單個物件和組合物件的使用具有一致性。適用性 想表示物件的部分 整體層次結構,希望使用者忽略組合物件與單個物件的不同,使用者將統一地使用組合結構中的所有物件。典型表示結構圖 宣告組合中的物件宣告介面 在適當的情況下,實現所有類共...