从对象生命周期判断关联、聚合与组合,怎么看?
先说出你的答案
定义边界、关键机制、一个反例;P8题再补容量、失败与验证。
查看完整题解
参考回答
直接回答
先问是否存在整体与部分,再问部分能否独立存在、被共享,以及谁决定它的生命周期。仅有协作关系通常用关联;整体引用独立部件可用聚合;整体独占并管理部件的业务生命周期时,组合更合适。这些分类来自模型约定,不能从 Java 引用的强弱或变量作用域直接推出。
讲清原理
“班级结束了,学生仍然存在”,说明学生的生命周期不由这一个班级独占;“订单明细离开所属订单就没有独立业务意义”,则适合组合模型。是否采用某种关系,需要结合当前业务,不能把所有“人和组织”都固定归为同一种。
UML 组合允许部件在整体删除前被移走,因此也不能机械说成“一旦属于过某整体,就永远不能转移”。关键约束是同一时刻的组合归属,以及整体删除时仍属于它的部件如何处理。
例子与易错点
可以检查三个入口:谁创建部件,谁能把部件交给另一个整体,谁能删除或移除部件。若实现允许任意共享一个可变部件,就需要重新审视“独占”的声明。
别把组合等同于数据库外键级联,也别把聚合等同于 WeakReference。它们分别属于建模、数据约束和 Java 引用机制,可能配合使用,但没有一一对应关系。
相关题:第 1 题、第 10 题、第 17 题。
和评分标准对照,你能独立回答到哪一步?
自评会安排下一次复习,不保存你的口述内容。
这道题,你掌握得怎么样?
掌握程度由你主动标记,阅读和收藏不会自动改变状态。