天天看點

組合模式

模式動機:使使用者可以一緻性的處理整個樹形結構或者樹形的一部分;使使用者在使用時無需對他們進行區分,可以一緻的對待容器對象和葉子對象.

定義:組合多個對象形成樹形結構以表示具有 部分-整體 關系的層次結構.組合模式讓用戶端可以統一對待單個對象群組合對象.

結構型模式

 組合模式結構圖

組合模式

結構成員:

  抽象構件(component) 為葉子對象和容器對象聲明接口. 這樣使用戶端可以統一對待這兩個對象. 定義了葉子構件和容器構件的行為.

  葉子構件(leaf) 表示葉子節點對象,葉子節點沒有子節點,它實作了在抽象構件中定義的行為.

  容器構件(composite) 維護了一個抽象構件的集合, 使得容器對象既可以包含容器節點,也可以包含葉子節點.

并且實作了抽象構件中定義的操作成員的方法. 它的操作方法可以遞歸調用葉子節點的實作方法.

組合模式根據是否将容器構件特有的方法在抽象構件中聲明又分為 透明組合模式 和 安全組合模式:

  這兩種組合模式優缺點正好相反,

透明組合模式的好處:抽象構件中聲明了所有用于管理成員對象的方法,確定了所有對象都有相同的接口,用戶端可以不用差別對待.

缺點:不夠安全,葉子節點不應該有的行為也會有.       

實作:

抽象構件

組合模式
組合模式

view code

葉子構件

組合模式
組合模式

容器構件

組合模式
組合模式