首先是实例然后再澄清。这是我的第一篇文章,我尝试过搜索。
示例1:在Car构造函数中创建的引擎对象。
public class Car{
private Engine engine;
Car(){
engine = new Engine();
}
}
示例2:在Car类外部创建并通过Car构造函数传入的Engine对象。
public class Car{
private Engine engine;
Car(Engine engine){
this.engine = engine;
}
}
示例3:在Car类外部创建并通过Car setEngine(引擎引擎)方法传入的引擎对象。
public class Car{
private Engine engine;
Car(){}
public void setEngine(Engine engine){
this.engine = engine;
}
}
我认为遏制既是构成又是聚合,而且包含的对象有一个所有者,比如Car拥有引擎。我认为差异在于每个物体的生命周期以及它们何时被摧毁。
组合:销毁Car Object时销毁引擎对象。
聚合:当Car Object被销毁时,引擎对象仍然存在。
我的Google搜索和stackoverflow搜索会产生歧义。
以上1,2和3中的哪些示例是组合,聚合或两者?为什么?以上哪些例子是关联关系?
答案 0 :(得分:0)
在#1中没有歧义,即组合,因为引擎不能由它自己生活。
对于#2和#3,它可能是一个或另一个,这取决于您在概念上如何对待引擎。如果发动机具有自己的生命周期(例如,它可以从一辆车中移除并安装在另一辆车中)那么它就会聚合。否则就是它的构成。
当对象仅在具有相同生命周期时聚集在一起时,通常更容易推理模型。