设计模式:复合与组合

Bar*_*uch 27 design-patterns composite composition

我正在完成一个关于设计模式的课程,虽然在审阅这些笔记时遇到了我在学期期间遗漏的东西:复合构图.我设法理解的是复合是指一个对象实际上封装了整个对象,而复合是指它只保存指向它们的指针.

  1. 这是正确的吗?有人可以向我解释这个好一点吗?
  2. 我什么时候比较喜欢一个?

Tom*_*icz 50

组成

这是一个设计概念(不是真正的模式).当您想要描述包含另一个对象的一个​​对象时,将使用此术语.它经常发生在继承讨论的组合中.

此外,构成意味着强大的所有权 一个对象拥有另一个对象(即管理生命周期).当父母被摧毁时,所有孩子也被摧毁.如果没有这种强烈的关系(孩子可以比父母长寿)我们正在谈论聚合.

在维基百科中引用一个很好的例子:

例如,一所大学拥有各个部门(例如化学),每个部门都有一些教授.如果大学关闭,部门将不复存在,但这些部门教授将继续存在.因此,大学可以被视为一个部门的组合,而部门则有教授的集合.此外,教授可以在多个部门工作,但一个部门不能成为一个以上大学的一部分.

因此,您可以看到您应该根据所有权关系的类型在组合或聚合之间进行选择.

复合图案

这是描述父子关系的GoF设计模式,其中子可以是简单节点或其他节点的容器(可能包含其他子节点).

它在GUI和树状结构中很常见.例如,在Java Swing中,a JPanel可以容纳各种控件,如文本字段,标签,列表等,但它也可以容纳其他JPanels,而这些s又可以包含简单的组件甚至更多的嵌套面板.

通常,复合设计模式使用合成,但在某些情况下,父级不必拥有所有子级.要继续GUI示例,您可以使用一个面板并将其移动到另一个位置(更改父级).

  • @baruch:我很高兴.所以你一直参加设计模式课程,你不知道[四人帮](http://c2.com/cgi/wiki?GangOfFour)是谁?:-) (4认同)
  • 谢谢。什么是GoF? (2认同)
  • @baruch:GoF指的是规范设计模式书(Gamma,Helm,Johnson,Vlissides)的作者. (2认同)