天天看點

Composite(組合)--對象結構型模式

Composite(組合)–對象結構型模式

一、意圖

将對象組合成樹形結構以表示“部分-整體”的層次結構。Composite使得使用者對單個對象群組合對象的使用具有一緻性。

二、動機

1.軟體在某些情況下,客戶代碼過多的依賴于對象容器複雜的内部實作結構,對象容器内部實作結構(而非抽象接口)的變化将引起客戶代碼的頻繁變化,帶來了代碼的維護性、擴充性等弊端。

2.如何将“客戶代碼與複雜代碼的對象容器結構”解耦?讓對象容器自己來實作自身的複雜結構,進而使得客戶代碼就像處理簡單對象一樣來處理複雜的對象容器?

三、适用性

1.你想表示對象的部分-整體層次結構。

2.你希望使用者忽略組合對象與耽擱對象的不同,使用者将統一地使用組合結構中所有對象。

四、結構

Composite(組合)--對象結構型模式

五、效果

1.定義了保護潔白對象群組合對象的類層次結構。

2.簡化客戶代碼。

2.是的更容易增加新類型的元件。

4.使你的設計變得更加一般化。

六、實作

1.顯示的父部件引用。

2.共享元件。

3.最大化Component接口。

4.聲明管理子部件的操作。

5.Component是否應該實作一個Component清單。

6.子部件排序。

7.使用高速緩沖存貯改善性能。

8. 應該由誰删除Component

9. 存貯元件最好用哪一個資料結構。

七、要點總結

1.Composite模式采用樹形結構來實作普遍存在的對象容器,進而将“一對多”的關系轉化為“一對一”的關系,使得客戶代碼可以一緻地(複用)處理對象和對象容器,無需關系處理的是單個對象,還是組合的對象容器。

2.将“客戶代碼與複雜的對象容器結構”解耦是Composite的核心思想,解耦之後,客戶代碼将與純粹的抽象接口——而非對象容器的内部實作結構——發生依賴,進而更能“應對變化”。

3.Composite模式在具體實作中,可以讓父對象的子對反向追溯;如果父對象有頻繁的周遊需求,可以使用緩存技巧來改善效率。

八、相關模式

通常部件-父部件連接配接用于Responsibility of Chain模式

Decorator模式經常與Composite模式一起使用。當裝飾群組合一起使用時,它們通常有一個公共的父類。是以裝飾必須支援Add、Remove和GetChild操作的Component接口。

Flyweight讓你共享元件,但不再能引用它們的父部件。

Itertor可用來周遊Composite。

Visitor将本來應該分布子啊Composite和Leaf類中的操作和行為局部化。

九、舉例說明

Composite模式就像一顆樹。

本文為李建忠設計模式視訊的筆記以及《設計模式-可複用面向對象的軟體的基礎》和自己的部分見解

繼續閱讀