設計模式之組合模式

2022-01-10 05:53:38 字數 1587 閱讀 6341

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

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

主要解決:它在我們樹型結構的問題中,模糊了簡單元素和複雜元素的概念,客戶程式可以像處理簡單元素一樣來處理複雜元素,從而使得客戶程式與複雜元素的內部結構解耦。

何時使用:

1、您想表示物件的部分-整體層次結構(樹形結構)。

2、您希望使用者忽略組合物件與單個物件的不同,使用者將統一地使用組合結構中的所有物件。

如何解決:樹枝和葉子實現統一介面,樹枝內部組合該介面。

關鍵**:樹枝內部組合該介面,並且含有內部屬性 list,裡面放 component。

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

典型的使用場景:部分、整體場景,如樹形選單,檔案、資料夾的管理。

public abstract class component

public abstract void add(component c);

public abstract void remove(component c);

public abstract void display(int depth);

}public class leaf : component

public override void add(component c)

public override void remove(component c)

public override void display(int depth)

");}

}public class composite : component

public override void add(component c)

public override void remove(component c)

public override void display(int depth)

");foreach (var component in _children)

}}var root = new composite("root");

root.add(new leaf("leaf a"));

root.add(new leaf("leaf b"));

var co = new composite("compositea");

co.add(new leaf("leaf x"));

co.add(new leaf("leaf y"));

var co1 = new composite("compositea");

co1.add(new leaf("leaf p"));

co1.add(new leaf("leaf q"));

co.add(co1);

root.add(co);

root.display(0);

設計模式之組合模式

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

設計模式之 組合模式

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

設計模式之組合模式

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