gpt4 book ai didi

design-patterns - 设计模式:合成与合成

转载 作者:行者123 更新时间:2023-12-03 10:11:21 24 4
gpt4 key购买 nike

我正在完成有关设计模式的类(class),并且在阅读笔记时遇到了我在本学期错过的一些内容:复合组合。我设法理解的是,组合是当对象实际封装整个对象时,而组合是当它仅持有指向它们的指针时。

  • 对吗?有人可以更好地向我解释一下吗?
  • 我什么时候比另一个更喜欢?
  • 最佳答案

    Composition

    这是一个设计概念(实际上不是模式)。当您要描述一个包含另一个对象的对象时,使用此术语。它在Composition over inheritance讨论中经常发生。

    此外,组成意味着强大的所有权。一个对象拥有(即管理生命周期)另一个对象。当 parent 被摧毁时,所有子女也被摧毁。如果没有这种牢固的关系( child 可以比 parent 长寿),我们在谈论聚合

    引用great example in Wikipedia:

    For example, a university owns various departments (e.g., chemistry), and each department has a number of professors. If the university closes, the departments will no longer exist, but the professors in those departments will continue to exist. Therefore, a University can be seen as a composition of departments, whereas departments have an aggregation of professors. In addition, a Professor could work in more than one department, but a department could not be part of more than one university.



    如您所见,您应该根据所有权关系的类型在组成还是聚集之间进行选择。

    Composite pattern

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

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

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

    关于design-patterns - 设计模式:合成与合成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9071067/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com