天天看點

設計模式系列: 合成(Composite)模式模式應用實踐

合成模式屬于對象的結構模式,有時又叫做“部分——整體”模式。

合成模式将對象組織到樹結構中,可以用來描述整體與部分的關系。合成模式可以使用戶端将單純元素與複合元素同等看待。

安全式合成模式的結構

涉及到三個角色

  ● 抽象構件(Component)角色:這是一個抽象角色,它給參加組合的對象定義出公共的接口及其預設行為,可以用來管理所有的子對象。合成對象通常把它所包含的子對象當做類型為Component的對象。在安全式的合成模式裡,構件角色并不定義出管理子對象的方法,這一定義由樹枝構件對象給出。

  ● 樹葉構件(Leaf)角色:樹葉對象是沒有下級子對象的對象,定義出參加組合的原始對象的行為。

  ● 樹枝構件(Composite)角色:代表參加組合的有下級子對象的對象。樹枝構件類給出所有的管理子對象的方法,如add()、remove()以及getChild()。

demo 

設計模式系列: 合成(Composite)模式模式應用實踐
設計模式系列: 合成(Composite)模式模式應用實踐
設計模式系列: 合成(Composite)模式模式應用實踐
設計模式系列: 合成(Composite)模式模式應用實踐

可以看出,樹枝構件類(Composite)給出了addChild()、removeChild()以及getChild()等方法的聲明和實作,而樹葉構件類則沒有給出這些方法的聲明或實作。這樣的做法是安全的做法,由于這個特點,用戶端應用程式不可能錯誤地調用樹葉構件的聚集方法,因為樹葉構件沒有這些方法,調用會導緻編譯錯誤。

  安全式合成模式的缺點是不夠透明,因為樹葉類和樹枝類将具有不同的接口。

透明式合成模式的結構

  與安全式的合成模式不同的是,透明式的合成模式要求所有的具體構件類,不論樹枝構件還是樹葉構件,均符合一個固定接口。

 demo

設計模式系列: 合成(Composite)模式模式應用實踐
設計模式系列: 合成(Composite)模式模式應用實踐
設計模式系列: 合成(Composite)模式模式應用實踐
用戶端類的主要變化是不再區分Composite對象和Leaf對象。

繼續閱讀