天天看点

设计模式系列: 合成(Composite)模式模式应用实践

合成模式属于对象的结构模式,有时又叫做“部分——整体”模式。

合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式可以使客户端将单纯元素与复合元素同等看待。

安全式合成模式的结构

涉及到三个角色

  ● 抽象构件(Component)角色:这是一个抽象角色,它给参加组合的对象定义出公共的接口及其默认行为,可以用来管理所有的子对象。合成对象通常把它所包含的子对象当做类型为Component的对象。在安全式的合成模式里,构件角色并不定义出管理子对象的方法,这一定义由树枝构件对象给出。

  ● 树叶构件(Leaf)角色:树叶对象是没有下级子对象的对象,定义出参加组合的原始对象的行为。

  ● 树枝构件(Composite)角色:代表参加组合的有下级子对象的对象。树枝构件类给出所有的管理子对象的方法,如add()、remove()以及getChild()。

demo 

设计模式系列: 合成(Composite)模式模式应用实践
设计模式系列: 合成(Composite)模式模式应用实践
设计模式系列: 合成(Composite)模式模式应用实践
设计模式系列: 合成(Composite)模式模式应用实践

可以看出,树枝构件类(Composite)给出了addChild()、removeChild()以及getChild()等方法的声明和实现,而树叶构件类则没有给出这些方法的声明或实现。这样的做法是安全的做法,由于这个特点,客户端应用程序不可能错误地调用树叶构件的聚集方法,因为树叶构件没有这些方法,调用会导致编译错误。

  安全式合成模式的缺点是不够透明,因为树叶类和树枝类将具有不同的接口。

透明式合成模式的结构

  与安全式的合成模式不同的是,透明式的合成模式要求所有的具体构件类,不论树枝构件还是树叶构件,均符合一个固定接口。

 demo

设计模式系列: 合成(Composite)模式模式应用实践
设计模式系列: 合成(Composite)模式模式应用实践
设计模式系列: 合成(Composite)模式模式应用实践
客户端类的主要变化是不再区分Composite对象和Leaf对象。

继续阅读