2012-09-05 111 views
2

我有點困惑,所以如果你能指教我。聚合或合成

  1. 當我在我的課程中通過new運算符創建一個對象或使用Singleton時,它是一個組合?
  2. 當我打電話給工廠的方法也是它的組成?

回答

3

組合與聚合與組件對象生存期有關,而不是組件對象如何實例化。如果在處理包含對象時處理組件對象,則它是組合對象。如果組件對象可以繼續存在,那就是Aggregation。

+0

爲了獲得這一點,我們假設我有一個BookShop和BookShopStuff類(以及Books,Newspapers等子類)。讓我們來說說BookShop數組中存儲的每個BookShopStuff對象。那麼這個作品呢?或BookShop聚合BookShopStuff元素?我很困惑。 – lunar

+0

好的,書很好。沒有書店,書店裏的書籍能否繼續存在?如果是,那麼它是Aggregation,如果不是,那就是Composition。 – Dave

+0

它們不能存在,因爲BookShop是保存所有實例的唯一位置。所以這是一個作品。 – lunar

2

術語「組合」在UML和OOP中具有稍微不同的含義。

在UML中,組合是一種更強大的聚合形式,有點像「擁有一個」關聯。

GoF設計模式書建議,在OOP中,人們應該傾向於構成而不是繼承。在這種情況下,組合只是意味着通過引用類而不是從其繼承來提供功能。

看來你有一些術語混在一起。創建和對象或調用工廠方法本身並不構成。