2017-02-28 66 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它可能是一個或另一個,這取決於你在概念上如何對待引擎。如果發動機有自己的生命週期(例如,它可以從一輛車上拆下並安裝在另一輛車上),那麼它就是聚合。否則它的構成。

當對象僅在具有相同生命週期時,聚集在一起時,通常更容易推理模型。

相關問題