將物件組合成樹形結構以表示「部分-整體」的層次結構,使得使用者對單個物件和組合物件的使用具有一致性。
1:component 抽象構件角色
定義參加組合物件的共有方法和屬性,可以定義一些預設的行為或屬性。
2:leaf 葉子構件
葉子物件,其下再也沒有其他的分支,也就是遍歷的最小單位。
3:composite 樹枝構件
樹枝物件,它的作用是組合樹枝節點和葉子節點形成乙個樹形結構。
1:抽象構件
public
abstract
class component
}
2:樹枝構件
public
class
composite
extends
component
//刪除乙個葉子構件或樹枝構件
public
void
remove(component component)
//獲取分支下的所有葉子構件和樹枝構件
public arraylistgetchildren()
}
3:葉子構件
public
class
leaf
extends
component
*/
}
4:場景類
public
class client
//通過遞迴遍歷樹
public
static
void
dispaly(composite root) else
} }
}
組合模式是對依賴倒轉原則的破壞,但是它還有其他型別的變形。
1:高層模組呼叫簡單。一顆樹形機構中的所有節點都是component,區域性和整體對呼叫者來說沒有任何區別,也就是說,高層模組不必關心自己處理的是單個物件還是整體組合結構。
2:節點自由增加。
3:在場景類的定義中,樹葉和樹枝使用實現類定義,這與依賴倒置原則衝突,這樣限制了介面的影響範圍。
只要是樹形結構,就要考慮使用組合模式,只要是要體現區域性和整體的關係的時候,而且這種關係可能比較深,就考慮組合模式。
深入理解設計模式(21) 組合模式
定義 將物件以樹形結構組織起來,以達成 部分 整體 的層次結構,使得客戶端對單個物件和組合物件的使用具有一致性。動機 motivation 客戶 過多地依賴於物件容器複雜的內部實現結構,物件容器內部實現結構 而非抽象介面 的變化將引起客戶 的頻繁變化,帶來了 的維護性 擴充套件性等弊端。如何將 客戶...
設計模式8 組合模式
組合模式首先想到的就是樹形結構,比如我們常用的檔案結構,請看windows的檔案結構 無論是檔案或者是資料夾,常用操作都是一致的,比如 複製 貼上 剪下 刪除 所佔空間大小。我們並沒有刻意的去分他是資料夾還是檔案。我們可以把資料夾看成是組合物件,把每乙個檔案看成是單個物件。組合模式模糊了這兩個概念,...
《設計模式12 組合模式
組合模式其實是乙個很形象的模式。它也被稱為部分整體模式。組合模式的結構就如同樹狀圖一樣。而樹就是枝幹 葉子的組合,組合模式可以形象的這麼理解。其實資料夾是乙個很好的組合模式的體現。乙個資料夾 樹根root 下可能有多個資料夾 枝幹trunk 可能是單個的檔案 樹葉leaf 而枝幹是可以繼續向下延伸的...