5

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

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

我不明白为什么装饰器和组件之间存在“聚合”关系。

我相信它应该是组合,因为没有基本组件就不能存在装饰器。

4

2 回答 2

7

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

在实践中,聚合和组合之间的界限可能很模糊,通常选择其中一个并没有太大区别,尤其是当您将图表视为草图时。

于 2009-11-20T22:48:11.857 回答
2

基本上是因为你可以在组件上有多个装饰器。来自关于聚合的维基百科:

组合和聚合之间的差异

一个组合的整体必须具有 0..1 或 1 的多重性,这表明一个部分必须只为一个整体。整个聚合可以具有任何多重性。

组合通常在容器类的实例和包含的类的实例之间具有很强的生命周期依赖性:如果容器被销毁,通常它包含的每个实例也会被销毁。

注意“通常”这个词的使用。

看看示例装饰器图,也可以在 wikipedia 上查看为什么会这样的更清晰示例。

于 2009-11-20T22:38:48.450 回答