Java 后端面试题库 / 全部题解免费阅读理解原理,有条理地回答

从对象生命周期判断关联、聚合与组合,怎么看?

查看完整题解

参考回答

直接回答

先问是否存在整体与部分,再问部分能否独立存在、被共享,以及谁决定它的生命周期。仅有协作关系通常用关联;整体引用独立部件可用聚合;整体独占并管理部件的业务生命周期时,组合更合适。这些分类来自模型约定,不能从 Java 引用的强弱或变量作用域直接推出。

讲清原理

“班级结束了,学生仍然存在”,说明学生的生命周期不由这一个班级独占;“订单明细离开所属订单就没有独立业务意义”,则适合组合模型。是否采用某种关系,需要结合当前业务,不能把所有“人和组织”都固定归为同一种。

UML 组合允许部件在整体删除前被移走,因此也不能机械说成“一旦属于过某整体,就永远不能转移”。关键约束是同一时刻的组合归属,以及整体删除时仍属于它的部件如何处理。

关联表示联系,聚合表示共享整体关系,组合强调独占部件
关联表示联系,聚合表示共享整体关系,组合强调独占部件

例子与易错点

可以检查三个入口:谁创建部件,谁能把部件交给另一个整体,谁能删除或移除部件。若实现允许任意共享一个可变部件,就需要重新审视“独占”的声明。

别把组合等同于数据库外键级联,也别把聚合等同于 WeakReference。它们分别属于建模、数据约束和 Java 引用机制,可能配合使用,但没有一一对应关系。

相关题:第 1 题、第 10 题、第 17 题。

这道题,你掌握得怎么样?

掌握程度由你主动标记,阅读和收藏不会自动改变状态。