聚合和组合之间的区别
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 当两个对象聚合时,看起来类似于合成,唯一的
不同的是,如果根对象被销毁,其他对象不会被销毁。
那么我们可以说聚合也是组合,反之亦然吗?
既然聚合就是组合,对象存在的唯一途径就是
独立是从外部提供它们。有点像注入它们而不是组合它们
从根内部 class。这听起来很像依赖注入原理。
对以上几点有任何评论或更多指示吗?
组合和聚合是两种类型的关联,用于表示两个类之间的关系。
在聚合中,父子实体保持Has-A关系,但两者也可以独立存在。我们可以独立使用父实体和子实体。父实体中的任何修改都不会影响子实体,反之亦然。在UML图中,聚合用空心菱形表示,这表明它们在关系强度方面存在明显差异。
在组合中,父实体拥有子实体,因此子实体不能没有父实体存在。我们不能直接或独立地访问子实体。在 UML 图中,组合由实心菱形表示。
有关详细信息,请参阅 here
我发现以下两个示例在 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 当两个对象聚合时,看起来类似于合成,唯一的
不同的是,如果根对象被销毁,其他对象不会被销毁。
那么我们可以说聚合也是组合,反之亦然吗?
既然聚合就是组合,对象存在的唯一途径就是
独立是从外部提供它们。有点像注入它们而不是组合它们
从根内部 class。这听起来很像依赖注入原理。
对以上几点有任何评论或更多指示吗?
组合和聚合是两种类型的关联,用于表示两个类之间的关系。
在聚合中,父子实体保持Has-A关系,但两者也可以独立存在。我们可以独立使用父实体和子实体。父实体中的任何修改都不会影响子实体,反之亦然。在UML图中,聚合用空心菱形表示,这表明它们在关系强度方面存在明显差异。
在组合中,父实体拥有子实体,因此子实体不能没有父实体存在。我们不能直接或独立地访问子实体。在 UML 图中,组合由实心菱形表示。
有关详细信息,请参阅 here