2017-02-28 12 views
1

先举例说明,然后再澄清。这是我的第一篇文章,我也尝试过搜索。包含对象是为了被视为构图还是聚合而创建的?

示例1:在Car构造函数中创建引擎对象。

public class Car{ 

    private Engine engine; 

    Car(){ 
     engine = new Engine(); 
    } 
} 

示例2:在Car类之外创建并通过Car构造函数传入的引擎对象。

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对象被销毁时仍然存在。

我的谷歌搜索和stackoverflow搜索造成歧义。

以上1,2和3中的几个例子是组合,聚合还是两者?为什么?上面的例子是关联关系吗?

+0

聚合将是一个有两个引擎的汽车。像普锐斯一样。 –

+0

看看这个。 https://www.codeproject.com/Articles/330447/Understanding-Association-Aggregation-and-Composit –

+0

示例2看起来像[策略模式](https://en.wikipedia.org/wiki/Strategy_pattern)。它可以模拟燃料注入与化油器; 4缸vs 6缸vs 8缸;等 – jww

回答

0

在#1中没有歧义,这是组成,因为引擎不能靠自己生活。

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

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

相关问题