組合模式(composite pattern):組合多個物件形成樹形結構以表示具有「整體—部分」關係的層次結構。組合模式對單個物件(即葉子物件)和組合物件(即容器物件)的使用具有一致性,組合模式又可以稱為「整體—部分」(part-whole)模式,它是一種物件結構型模式。
現在要開發一款防毒軟體,要求能對多種檔案型別進行防毒,也能對資料夾進行防毒。我們知道資料夾類似於一種樹形結構,資料夾中可以包含資料夾和檔案,那麼如何才能實現上述功能呢?
上面是一種很容易想到的解決方案,也是筆者在學習組合模式之前的解決方案,我們來分析下上述方案的缺點:
所以我們尋求新的解決方案,要想符合開閉原則,那麼就不能將imagefile, textfile,folder區別對待,要將他們統一化。
其實到這裡比較容易想到,做乙個抽象層,針對抽象程式設計就能將他們統一起來。
先看組合模式的結構圖:
從上圖看出,組合模式的確是提供了乙個抽象層,而且composite和component具有組合關係。
我們看下使用組合模式後。防毒軟體的解決方案:
是不是明白了,在folder裡不再有各個檔案的列表,而是抽象類的列表,對抽象程式設計。
本系列部落格位址
Java設計模式 內功修煉 結構型 裝飾者模式
裝飾模式 decorator pattern 動態地給乙個物件增加一些額外的職責,就增加物件功能來說,裝飾模式比生成子類實現更為靈活。裝飾模式是一種結構型設計模式。從其定義可以看出,裝飾者模式起到擴充套件功能的作用,也是一種替代繼承的技術,是合成復用原則的一種體現。以按鈕舉例 可以利用裝飾者裝修其大...
java結構型設計模式 組合模式
1 模式理解 組合模式就是把兩個物件放在乙個物件裡嘍,確切的說是乙個物件包含別的物件的集合,好比你一老闆可以有很多個員工,夠清除了吧 2 運用場景 單對多或者多對單的時候可以使用組合模式 3 示例 先建立員工物件 public class staff public string getname pu...
java結構型設計模式 裝飾模式
1 模式理解 這個模式還是很好理解的,裝飾嘛,就像我們裝修房子一樣,就是在原有的基礎上進行改進。結構模式就是被裝飾的類都統一實現乙個介面,裝飾類也實現這個介面,用來做裝飾的類統一繼承這個裝飾類。舉個例子,有乙個小男孩,裝飾一下,有乙個可愛的小男孩,可愛就是用來裝飾的,裝飾完之後小男孩還是小男孩,就是...