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

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

 

 

安全式合成模式的结构

涉及到三个角色

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

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

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

demo 

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

 

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

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

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

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

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

 

透明式合成模式的结构

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

 demo

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

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

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

 

客户端类的主要变化是不再区分Composite对象和Leaf对象

可以看出,客户端无需再区分操作的是树枝对象(Composite)还是树叶对象(Leaf)了;对于客户端而言,操作的都是Component对象。

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

相关文章:

  • 2021-07-07
  • 2021-07-20
  • 2021-10-08
  • 2021-05-04
  • 2021-10-13
  • 2021-12-31
猜你喜欢
  • 2021-08-13
  • 2021-08-16
  • 2021-07-05
  • 2021-07-06
  • 2021-08-02
  • 2021-12-14
相关资源
相似解决方案