聚合和组合之间的区别

Difference between aggregation and composition

我发现以下两个示例在 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. 既然聚合就是组合,对象存在的唯一途径就是
    独立是从外部提供它们。有点像注入它们而不是组合它们
    从根内部 class。这听起来很像依赖注入原理。

对以上几点有任何评论或更多指示吗?

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

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

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

有关详细信息,请参阅 here