【发布时间】:2012-02-22 16:07:30
【问题描述】:
我正在完成关于设计模式的课程,在复习笔记时发现了我在学期中错过的一些东西:Composite vs. Composition。我设法理解的是,复合是一个对象实际上封装了整个对象,而复合是它只保存指向它们的指针。
- 是这样吗?谁能更好地向我解释一下?
- 我什么时候更喜欢其中之一?
【问题讨论】:
标签: design-patterns composite composition
我正在完成关于设计模式的课程,在复习笔记时发现了我在学期中错过的一些东西:Composite vs. Composition。我设法理解的是,复合是一个对象实际上封装了整个对象,而复合是它只保存指向它们的指针。
【问题讨论】:
标签: design-patterns composite composition
这是一个设计概念(不是真正的模式)。当您要描述一个包含另一个对象的对象时,使用该术语。它经常出现在Composition over inheritance 讨论中。
此外,组合意味着强大的所有权。一个对象拥有(即管理生命周期)另一个对象。当父级被销毁时,所有子级也被销毁。如果没有这种牢固的关系(孩子可以比父母长寿),我们正在谈论聚合。
例如,一所大学拥有多个系(例如化学),每个系都有许多教授。如果大学关闭,这些系将不复存在,但这些系的教授将继续存在。因此,大学可以看作是系的组合,而系是教授的集合体。此外,教授可以在多个系工作,但一个系不能隶属于多个大学。
如您所见,您应该根据所有权关系的类型在组合或聚合之间进行选择。
这是一种描述父子强关系的 GoF 设计模式,其中子节点可以是简单节点或其他节点的容器(可能包含其他子节点)。
在 GUI 和树状结构中很常见。例如。在 Java Swing 中,JPanel 可以包含各种控件,例如文本字段、标签、列表等,但它也可以包含其他 JPanels,而这些JPanels 又可以包含简单的组件甚至更多的嵌套面板。
通常复合 设计模式使用复合,但在某些情况下,父级不必拥有所有子级。要继续 GUI 示例,您可以将一个面板移动到另一个位置(更改父级)。
【讨论】:
design concept 有疑问,其他可用的设计概念是什么?我试图用谷歌搜索它,找不到任何东西。谢谢