1. 程式人生 > >結構型模式之組合COMPOSITE

結構型模式之組合COMPOSITE

一、意圖

將物件組合成樹形結構以表示部分-整體層次結構,使得 單個元件與組合元件具有一致性。

二、圖解

這裡寫圖片描述
上圖可知Line,Rectangle,Text屬於基本元件,而Picture可以對這些元件進行組合,需要什麼往容器新增什麼元件。一致性表現在繼承自Graphic,都具有Draw()方法,但是Picture類確實通過呼叫其他元件的Draw()實現的。通過組合我們可以形成以下組合物件結構:
這裡寫圖片描述
如果收到的是葉子節點之間處理請求,如果是組合節點,則將請求發給子節點。

三、結構

這裡寫圖片描述

四、其他

  1. 子部件顯式的對父部件引用有利於簡化遍歷和管理,實現子部件直接能夠遍歷到父部件。
  2. 共享元件,減少儲存空間,可以通過對子部件設定多個父部件,但會導致多義性。Flyweight模式解決此問題。
  3. Add()和Remove()函式該放置何位置?由於客戶知道Component介面,放在Component類中預設提高透明性,但對葉子節點無意義;放在Composite中提高安全性。