Java中聚合和组合的区别
聚合和组合描述对象之间相互通信时的关系类型,这可能在低级设计中用于描述对象之间的关联。在本文中,我们将讨论Java编程语言中聚合和组合之间的区别。
聚合
它是一种特殊的协会形式:
- 它代表Has-A的关系。
- 这是一种单向关联,即单向关系。例如,一个系可以有学生,但反过来是不可能的,因此是单向的。
- 在聚合中,两个条目都可以单独存在,这意味着结束一个实体不会影响另一个实体。
示例:
输出:
输出解释: 在这个例子中,有一个研究所,它有许多部门,如CSE和EE。每个部门都没有。的学生。因此,我们创建了一个Institute类,它有一个Object或no的引用。Department类的object(即List of Objects)。这意味着Institute类通过它的Object与Department类相关联。Department类也引用了Student类的一个或多个对象(即对象列表),这意味着它通过它的对象与Student类相关联。它表示Has-A关系。在上面的例子中:Student has a name。学生有一个ID。优等生系优等生系优等生如下图所示。
我们什么时候使用聚合?
代码重用最好通过聚合来实现。
组合
组合是一种限制形式的聚合,其中两个实体高度依赖彼此。
- 它代表了关系的一部分。
- 在组合中,两个实体相互依赖。
- 当两个实体之间存在组合时,组合的对象不能离开另一个实体而存在。
示例:
输出:
输出解释: 在上面的例子中,一个图书馆可以有许多关于相同或不同主题的书。所以,如果图书馆被毁了,那么这个图书馆里的所有书都会被毁。也就是说,书不能没有图书馆。这就是构成的原因。书是图书馆的一部分。
Java中聚合和组合的区别
聚合 | 组合 |
---|---|
聚合可以被描述为“Has-a”关系,它表示对象之间的关联。 | 复合意味着一个对象包含在另一个对象中。它是一种特殊类型的聚合(即Has-a关系),这意味着一个对象是另一个对象的所有者,这可以称为所有权关联。 |
对象之间存在相互依赖关系。 | 有一种单向的关系,这也叫“部分”关系。 |
它是一种弱类型的关联,两个对象都有自己独立的生命周期。 | 它是一种强类型的关联(聚合),子对象没有自己的生命周期。 |
关联对象可以独立存在,并且有自己的生命周期。 | 孩子的生命取决于父母的生命。只有父对象有独立的生命周期。 |
White Diamond的UML表示表示聚合。 | 黑钻石的UML表示表示组合。 |
例如,学生和部门之间的关系。学生可能没有一个系。 | 例如,一个包含在文件夹中的文件,如果删除了文件夹内的所有文件就会被删除。如果没有文件夹,文件就不能存在。 |