設計模式原則21 組合模式

2021-08-20 08:03:07 字數 1262 閱讀 9310

將物件組合成樹形結構以表示「部分-整體」的層次結構,使得使用者對單個物件和組合物件的使用具有一致性。

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 而枝幹是可以繼續向下延伸的...