設計模式系列 二 組合模式

2021-07-10 09:01:50 字數 834 閱讀 9457

以樹形結構表示「整體-部分」的層次結構。對單個物件和組合物件擁有一致性的操作體驗。

在一些場景下,使用者可以使用簡單的元件組合複雜的元件,這些複雜的元件又可以組合成更複雜的元件。最簡單的實現方法,是對於簡單元件分別使用一些類實現,然後再定義一些類,作為這些簡單類的容器。

這存在乙個明顯的問題:使用這些類的**要區別簡單元件和容器,而實際上大多數使用情況下,使用者認為他們應用有一致的行為。加入這些區別,使得操作複雜化。

組合(composite)模式,描述了如何使用遞迴組合,使使用者不需要區分這些類。

組合模式的關鍵在於乙個抽象的類,即可以代表簡單元件,又可以代表容器。所有的元件和容器都繼承自此抽象類,同時容器類又是基類物件的聚合。

leaf

composite

client

client 使用 component 的介面與組合結構中的物件互動,葉子節點直接處理請求。composite 節點通常會**請求給子節點,**前後可能會有一些輔助操作

顯式的父元件引用(parent reference)

共享元件

最大化元件介面

何處宣告子元件管理操作

在component中放入component列表

子元件有序

需要有序時,使用iterator模式

快取 快取能夠提公升遍歷時的效能。但要注意,在節點改變時,通知父節點快取已經失效。

刪除元件責任

父元件在自身被刪除時,應負責刪除自己的子元件。除非子元件是不可變的或者共享的

儲存元件的最佳資料結構

依據不同場景靈活變化。有時甚至需要自己實現一些管理介面和結構。可以參見interpreter模式

設計模式8 組合模式

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

《設計模式12 組合模式

組合模式其實是乙個很形象的模式。它也被稱為部分整體模式。組合模式的結構就如同樹狀圖一樣。而樹就是枝幹 葉子的組合,組合模式可以形象的這麼理解。其實資料夾是乙個很好的組合模式的體現。乙個資料夾 樹根root 下可能有多個資料夾 枝幹trunk 可能是單個的檔案 樹葉leaf 而枝幹是可以繼續向下延伸的...

設計模式11 組合模式

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