Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 设计模式:组合与组合_Design Patterns_Composite_Composition - Fatal编程技术网

Design patterns 设计模式:组合与组合

Design patterns 设计模式:组合与组合,design-patterns,composite,composition,Design Patterns,Composite,Composition,我正在完成一门关于设计模式的课程,在复习笔记的时候,我发现了我在这学期错过的一些东西:复合型与组合型。我设法理解的是,复合是当一个对象实际封装整个对象时,而复合是当它只保存指向它们的指针时 是这样吗?有人能给我解释一下吗 什么时候我会喜欢一个而不是另一个 这是一个设计概念(不是真正的模式)。当您想要描述一个对象包含另一个对象时,使用此术语。这在讨论中经常发生 此外,组合意味着强大的所有权。一个对象拥有(即管理另一个对象的生命周期)。当父对象被销毁时,所有子对象也将被销毁。如果没有这样牢固的关系(

我正在完成一门关于设计模式的课程,在复习笔记的时候,我发现了我在这学期错过的一些东西:复合型组合型。我设法理解的是,复合是当一个对象实际封装整个对象时,而复合是当它只保存指向它们的指针时

  • 是这样吗?有人能给我解释一下吗
  • 什么时候我会喜欢一个而不是另一个
  • 这是一个设计概念(不是真正的模式)。当您想要描述一个对象包含另一个对象时,使用此术语。这在讨论中经常发生

    此外,组合意味着强大的所有权。一个对象拥有(即管理另一个对象的生命周期)。当父对象被销毁时,所有子对象也将被销毁。如果没有这样牢固的关系(孩子可以比父母活得长),我们就说的是聚合

    引述:

    例如,一所大学拥有多个系(如化学),每个系都有若干教授。如果大学关闭,这些系将不再存在,但这些系的教授将继续存在。因此,大学可以被看作是由各系组成的,各系由教授组成。此外,一名教授可以在多个系工作,但一个系不能是多所大学的一部分

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

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

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


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

    +1解释这两个面板,但OP似乎还需要关于包含和只是指针问题的帮助。@MattFenwick:对,我添加了一些说明和引用(也关于聚合)。@baruch:我的荣幸。那么你参加了设计模式课程,却不知道是谁?:-)@baruch:GoF指的是《规范设计模式》一书的作者(Gamma,Helm,Johnson,Vlissides)。嗨@TomaszNurkiewicz我知道这本书很古老,但这是金子。。。谢谢你的解释,不管怎样,我对
    设计概念
    有疑问,其他可用的设计概念是什么?我试着用谷歌到处搜索,找不到。谢谢