Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 组合与聚合:在其他包含对象中重用的包含对象的所有权_Oop_Design Patterns_Aggregation_Composition - Fatal编程技术网

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方法或构造函数参数接收其
处理器的
计算机
对象进行对比。在这种情况下,
处理器
由其他对象实例化,
计算机
对其
处理器
没有唯一的所有权,因为它没有对
处理器
对象的唯一引用。引号将此关系称为组合

在实践中,聚合和组合之间的差异很少重要。组合和继承之间的区别要重要得多