是否创建包含对象以将其视为组合或聚合是否重要?

时间:2017-02-28 04:05:27

标签: java oop

首先是实例然后再澄清。这是我的第一篇文章,我尝试过搜索。

示例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中的哪些示例是组合,聚合或两者?为什么?以上哪些例子是关联关系?

1 个答案:

答案 0 :(得分:0)

在#1中没有歧义,即组合,因为引擎不能由它自己生活。

对于#2和#3,它可能是一个或另一个,这取决于您在概念上如何对待引擎。如果发动机具有自己的生命周期(例如,它可以从一辆车中移除并安装在另一辆车中)那么它就会聚合。否则就是它的构成。

当对象仅在具有相同生命周期聚集在一起时,通常更容易推理模型。