【问题标题】:Difference between aggregation and composition [duplicate]聚合和组合之间的区别[重复]
【发布时间】:2021-06-14 16:07:35
【问题描述】:

我发现以下两个示例在 java 代码中区分聚合和组合
组合

final class Car {

  private final Engine engine;

  Car(EngineSpecs specs) {
    engine = new Engine(specs);
  }

  void move() {
    engine.work();
  }
}

聚合

final class Car {

  private Engine engine;

  void setEngine(Engine engine) {
    this.engine = engine;
  }

  void move() {
    if (engine != null)
      engine.work();
  }
}

我有一些疑问。我注意到这两个方面的以下几点
1 当两个对象聚合在一起时,看起来类似于组合,唯一的
不同的是,如果根对象被销毁,其他对象不会被销毁。

  1. 那么我们是否可以说聚合也是一种组合,但反之则不然?

  2. 由于在聚合中涉及到组合,因此对象存在的唯一方式
    独立是从外部提供它们。有点像注入它们而不是组合它们
    从根类内部。这听起来很像依赖注入原理。

以上几点或更多指针的任何cmet?

【问题讨论】:

  • 另外:不,“聚合模式”,正如在领域驱动设计文献中所理解的那样,不应被理解为“聚合”的表达。它的性质接近于构图。
  • 感谢您的链接。聚合看起来很像依赖注入。不是吗?

标签: java design-patterns domain-driven-design aggregation composition


【解决方案1】:

组合和聚合是关联的两种类型,用于表示两个类之间的关系。

在 Aggregation 中,父子实体保持 Has-A 关系,但两者也可以独立存在。我们可以独立使用父实体和子实体。父实体中的任何修改都不会影响子实体,反之亦然。在 UML 图中,聚合用一个空菱形表示,这表明它们在关系强度方面存在明显差异。

在组合中,父实体拥有子实体,因此子实体不能在没有父实体的情况下存在。我们不能直接或独立访问子实体。在 UML 图中,组合由实心菱形表示。

欲了解更多信息,请参阅here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    • 2014-05-03
    • 2017-05-28
    • 2014-01-28
    • 1970-01-01
    • 2020-03-18
    相关资源
    最近更新 更多