2012-09-05 71 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中,人们应该倾向于构成而不是继承。在这种情况下,组合只是意味着通过引用类而不是从其继承来提供功能。

看来你有一些术语混在一起。创建和对象或调用工厂方法本身并不构成。