【问题标题】:Composition vs. Aggregation: Ownership of the contained object being reused in other containing objects组合与聚合:包含对象的所有权在其他包含对象中重用
【发布时间】:2020-04-28 07:29:08
【问题描述】:

我正在阅读Inheritance and Composition (Is-a vs Has-a relationship) in Java 的帖子,我对以下声明感到困惑。

同样值得注意的是,在这种情况下,当且仅当对象不能在另一个 Computer 对象中重用时,包含的 Computer 对象才拥有所包含对象的所有权。如果可以,我们'将使用聚合而不是组合,其中不暗示所有权。

这里是被引用的代码sn-p

public class Computer{
    private Processor processor;
    private Memory memory;
    private SoundCard soundCard;
    //... more code
}

在另一个计算机对象中重复使用是什么意思?这是否意味着当我有两个计算机实例时,它们不应该共享这些组合对象(处理器、内存、声卡)?

有人可以举一个例子,在上面的陈述之后使用聚合而不是组合?

【问题讨论】:

    标签: oop design-patterns aggregation composition


    【解决方案1】:

    问题是,私有字段是如何实例化的?

    这是否意味着当我有两个计算机实例时,它们不应该共享这些组合对象...

    是的。

    如果一个Computer 对象实例化了它自己的Processor,因此没有其他对象引用该Processor 实例,那么它“拥有”它的Processor,引用引用为聚合

    将该场景与Computer 对象进行对比,该对象通过getter 方法或构造函数参数接收其Processor。在这种情况下,Processor 由某个其他对象实例化,并且Computer 没有其Processor 的唯一所有权,因为它没有对Processor 对象的唯一引用。引用将这种关系称为 composition

    在实践中,聚合和组合之间的区别并不重要。组合和继承之间的区别要重要得多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-23
      • 2019-08-01
      • 2020-11-20
      • 1970-01-01
      • 1970-01-01
      • 2018-12-31
      • 1970-01-01
      相关资源
      最近更新 更多