理解DoFactory设计模式的UML - 装饰器

时间:2009-11-20 22:20:55

标签: design-patterns uml decorator aggregation

我试图理解在下面链接中描述装饰器模式的UML图

http://www.dofactory.com/Patterns/PatternDecorator.aspx

我不明白为什么Decorator和Component之间存在“聚合”关系。

我认为它应该是组合,因为没有基础组件,Decorator就不可能存在。

2 个答案:

答案 0 :(得分:7)

组合比聚合更强,它通常意味着对象拥有其组件的所有权。在这种情况下情况并非如此,因为装饰器不拥有装饰对象。此外,您可以删除装饰器,而无需删除装饰对象。

在实践中,聚合和构图之间的界限可能会模糊,而且无论您选择其中一个,通常都没有太大区别,特别是如果您将图表视为草图。

答案 1 :(得分:2)

基本上是因为组件上可以有多个装饰器。来自维基百科aggregation

  

作文与作文之间的差异   聚合

     

整个作品必须有一个   多重性为0..1或1,表示   一部分必须只有一个   整个。整个聚合可能   有多重性。

  

作文通常具有强烈的生命   实例之间的循环依赖   容器类和实例   包含的类:如果是   容器被破坏,通常是每一个   它包含的实例被销毁   同样。

请注意使用“通常”一词。

请查看维基百科上的example decorator diagram,了解更何清楚的原因。