組合模式其實是乙個很形象的模式。它也被稱為部分整體模式。
組合模式的結構就如同樹狀圖一樣。而樹就是枝幹、葉子的組合,組合模式可以形象的這麼理解。
其實資料夾是乙個很好的組合模式的體現。
乙個資料夾(樹根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 ...