設計模式之組合模式

2021-09-11 16:46:13 字數 2210 閱讀 7333

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

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

高層模組呼叫簡單。一棵樹形機構中的所有節點都是component,區域性和整體對呼叫者來說沒有任何區別,也就是說,高層模組不必關心自己處理的是單個物件還是整個組合結構,簡化了高層模組的**。

節點自由增加。使用了組合模式後,增加乙個樹枝節點、樹葉節點變得非常容易,只要找到它的父節點就成,非常容易擴充套件,符合開閉原則,對以後的維護非常有利。

組合模式有乙個非常明顯的缺點,看到我們在客戶端呼叫中的定義,提到樹葉和樹枝使用時的定義了嗎?直接使用了實現類!這在面向介面程式設計上是很不恰當的,與依賴倒置原則衝突,讀者在使用的時候要考慮清楚,它限制了你介面的影響範圍。

component:組合物件抽象類

/**

* 組合物件抽象類

* * created by zhenguo on 11/30/14.

*/public abstract class component

public abstract void add(component component);

public abstract void remove(component component);

public abstract void display(int depth);

protected string getdepthstr(int depth)

return sb.tostring();}}

leaf:葉子節點,無子節點

/**

* 葉子節點,無子節點

* * created by zhenguo on 11/30/14.

*/public class leaf extends component

@override

public void add(component component)

@override

public void remove(component component)

@override

public void display(int depth)

}

composite:子節點

/**

* 子節點

* * created by zhenguo on 11/30/14.

*/public class composite extends component

@override

public void add(component component)

@override

public void remove(component component)

@override

public void display(int depth) }}

client:客戶端呼叫

/**

* 客戶端呼叫

* 組合模式(composite),將物件組合成樹形結構以表示『部分-整體』的層次結構。組合模式使得使用者

* 對單個物件和組合物件的使用具有一致性。

* * created by zhenguo on 11/30/14.

*/public class client

}

設計模式系列:

建立型結構型

行為型工廠方法

簡單工廠

抽象工廠

建造者模式

單例模式

原型模式

組合模式

外觀模式

橋接模式

**模式

享元模式

介面卡模式

裝飾模式

策略模式

模板方法

狀態模式

觀察者模式

備忘錄模式

迭代器模式

命令模式

職責鏈模式

直譯器模式

訪問者模式

中介者模式

設計模式之組合模式

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

設計模式之 組合模式

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

設計模式之組合模式

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