Oop 组合与聚合:在其他包含对象中重用的包含对象的所有权
我正在读一篇帖子,我被下面的陈述弄糊涂了 还值得注意的是,在这种情况下,当且仅当对象不能在另一个计算机对象中重用时,包含的计算机对象才拥有所包含对象的所有权。如果可以,我们将使用聚合,而不是组合,其中不包含所有权 下面是正在引用的代码段Oop 组合与聚合:在其他包含对象中重用的包含对象的所有权,oop,design-patterns,aggregation,composition,Oop,Design Patterns,Aggregation,Composition,我正在读一篇帖子,我被下面的陈述弄糊涂了 还值得注意的是,在这种情况下,当且仅当对象不能在另一个计算机对象中重用时,包含的计算机对象才拥有所包含对象的所有权。如果可以,我们将使用聚合,而不是组合,其中不包含所有权 下面是正在引用的代码段 public class Computer{ private Processor processor; private Memory memory; private SoundCard soundCard; //... more
public class Computer{
private Processor processor;
private Memory memory;
private SoundCard soundCard;
//... more code
}
在另一个计算机对象中重用意味着什么?这是否意味着当我有两个计算机实例时,它们不应该共享这些组合对象(处理器、内存、声卡)
有人能举一个例子,在上面的陈述之后使用聚合而不是合成吗?问题是,私有字段是如何实例化的 这是否意味着当我有两个计算机实例时,它们不应该共享这些组合对象 对 如果一个
计算机
对象实例化了它自己的处理器
,因此没有其他对象引用该处理器
实例,那么它“拥有”它的处理器
,引用称之为聚合
将该场景与通过getter方法或构造函数参数接收其处理器的计算机
对象进行对比。在这种情况下,处理器
由其他对象实例化,计算机
对其处理器
没有唯一的所有权,因为它没有对处理器
对象的唯一引用。引号将此关系称为组合
在实践中,聚合和组合之间的差异很少重要。组合和继承之间的区别要重要得多