我试图理解在下面链接中描述装饰器模式的UML图
http://www.dofactory.com/Patterns/PatternDecorator.aspx
我不明白为什么Decorator和Component之间存在“聚合”关系。
我认为它应该是组合,因为没有基础组件,Decorator就不可能存在。
答案 0 :(得分:7)
组合比聚合更强,它通常意味着对象拥有其组件的所有权。在这种情况下情况并非如此,因为装饰器不拥有装饰对象。此外,您可以删除装饰器,而无需删除装饰对象。
在实践中,聚合和构图之间的界限可能会模糊,而且无论您选择其中一个,通常都没有太大区别,特别是如果您将图表视为草图。
答案 1 :(得分:2)
基本上是因为组件上可以有多个装饰器。来自维基百科aggregation:
作文与作文之间的差异 聚合
整个作品必须有一个 多重性为0..1或1,表示 一部分必须只有一个 整个。整个聚合可能 有多重性。
也
作文通常具有强烈的生命 实例之间的循环依赖 容器类和实例 包含的类:如果是 容器被破坏,通常是每一个 它包含的实例被销毁 同样。
请注意使用“通常”一词。
请查看维基百科上的example decorator diagram,了解更何清楚的原因。