《設計模式12 組合模式

2021-07-22 11:54:00 字數 1505 閱讀 1228

組合模式其實是乙個很形象的模式。它也被稱為部分整體模式。

組合模式的結構就如同樹狀圖一樣。而樹就是枝幹、葉子的組合,組合模式可以形象的這麼理解。

其實資料夾是乙個很好的組合模式的體現。

乙個資料夾(樹根root)下可能有多個資料夾(枝幹trunk),可能是單個的檔案(樹葉leaf)。

而枝幹是可以繼續向下延伸的,樹葉則是樹枝的端點,不能繼續延伸。資料夾和檔案也是如此。

同樣如此,公司的結構也可以用組合模式展示。

乙個總公司下可能兩個子公司(trunk),而子公司下可能有某個部門(leaf)。這種就是以樹的形式展開的。

下面我就用公司的例子展示一下,組合模式的基本**。

首先建立乙個抽象類,代表乙個抽象的根節點,而枝幹、葉子都是由這個根節點抽象而來。

public abstract class abstractroot 

public abstract void show();

}

/**

* 枝幹,可能有分支,所以要用乙個list來新增和刪除分支,分支可能是另乙個分支或者是葉子

* @author xiaoqi

* */

public class trunk extends abstractroot

@override

public void show() }

/*** 新增子節點

*/public void add(abstractroot child)

/*** 刪除子節點

* @param chid

*/public void remove(abstractroot child)

}

而子公司就是可以擴充套件下一部門的,因此子公司就是乙個枝幹。

/**

* 葉子是沒有分支的,所以只能用來顯示,並不能繼續擴充套件了

* @author xiaoqi

* */

public class leaf extends abstractroot

@override

public void show()

}

而公司的各個部門就是葉子,它下面就沒有下一級單位了。

使用測試:

public class compositetest 

}

首先建立乙個「總公司」,為總公司新增兩個子公司,

而兩個子公司各自有兩個不同的部門,因此可以繼續各自新增。

部門是沒有下一級單位的,因此不能操作了。

測試結果:

枝幹:總公司

枝幹:子公司1

客服部市場部

枝幹:子公司2

結果也和我們想的一樣,是乙個以「總公司」為根節點擴充套件的乙個樹形結構。

組合模式的基本使用就介紹到這了,關於更深的研究還是得在專案中才能理解。

12 組合模式

1.說明 請參見本文第一章 2.組合模式說明 組合模式 將物件組合成樹形介面以表示 部分 整體 的層次結構。組合模式使得使用者對單個物件和組合物件具有一致性。為了保持整體和區域性的一致性,整體和區域性具有相同的介面,從而避免判斷該節點是整體還是區域性。介面可以實現為空。使用範圍 在需求中體現部分與整...

設計模式8 組合模式

組合模式首先想到的就是樹形結構,比如我們常用的檔案結構,請看windows的檔案結構 無論是檔案或者是資料夾,常用操作都是一致的,比如 複製 貼上 剪下 刪除 所佔空間大小。我們並沒有刻意的去分他是資料夾還是檔案。我們可以把資料夾看成是組合物件,把每乙個檔案看成是單個物件。組合模式模糊了這兩個概念,...

設計模式11 組合模式

組合模式有時又叫部分 整體模式在處理類似樹形結構的問題時比較方便 分支類public class treenode public string getname public void setname string name public treenode getparent public void ...