聚合和组合之间的差异



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

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当两个对象聚合时,它看起来类似于组合,唯一的
区别是,如果根对象被破坏,其他对象将不会被破坏

  • 那么我们能说聚合也是一种组合吗

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

  • 对以上几点或更多的指针有意见吗?

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

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

    在Composition中,父实体拥有子实体,因此没有父实体,子实体就不可能存在。我们无法直接或独立访问子实体。在UML图中,组成由填充的菱形表示。

    有关更多信息,请参阅此处

    最新更新