我一直在阅读有关组合和聚合的内容。我想我了解两种不同关系类型的基础。然而,它在代码中的实际外观仍然不清楚。
如果您有一个复合对象,是否意味着您永远不会在正在定义的复合对象之外编写 new OtherObject()
?您从不将 OtherObject
类型的引用传递给复合对象,它是在内部维护的吗?
在所有传递引用的情况下,您处理的不再是组合而是聚合,这对吗?两者之间的界限在哪里?我不明白什么时候允许谈论属于组合物的对象而不是属于组合物的对象的规则。
最佳答案
Composition is a strong association.
Aggregation is a weak association.
聚合 是关联的一个特例。对象之间的定向关联。当一个对象“拥有”另一个对象时,您就得到了它们之间的聚合。它们之间的方向指定了哪个对象包含另一个对象。
组合 是聚合的一个特例。以更具体的方式,受限制的聚合称为组合。当一个对象包含另一个对象时,如果没有容器对象的存在,所包含的对象就不可能存在,则称为组合。
组合是一个关联,其中包含对象 b
负责包含对象 a
的生命周期。如果将已创建对象 a
的引用传递给另一个对象 b
,则 b
无法控制 的生命周期>a
。这意味着 a
即使没有 b
也可以存在。
class A {
B b ;
A(B b ) { this.b = b; }
}
这里b
的存在不依赖于a
,但是A
确实包含了B
的对象.聚合。
class A {
B b ;
A() { b = new B();}
}
这里 b
依赖于 A
对象的存在。如果没有 A
的对象,则也没有 B
的对象。 组成。
关于java - 组合与聚合在代码上有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17468348/