在面向对象的设计思路里,需要经常处理类与类之间的关系。关联、聚合和组合是就是类与类之间三种不通的关系。
什么是关联?
简单的讲,类之间的关联关系代表着对象有着独立的生命周期,没有从属关系。我们以学生和老师举例。一个学生可以关联多名老师,而一个老师也可以关联多名学生。但是,他们都有各自的生命周期。当老师离开教室,不必删除任何学生。学生仍可以留在教室听其他老师的课程。
什么是聚合?
关联指的是对象之间有独立的生命周期,但没有从属关系。而聚合则是既有独立的生命周期,又有从属关系。需要强调的是,子对象不能出属于其他对象。以手机与手机电池举例,手机电池从属于手机。如果手机损坏了,那么手机电池仍可以为其他手机提供电源,不必删除。然而,手机电池却不能为电脑提供电源支持。
什么是组合?
组合指的是那些没有独立生命周期,父对象删除后,子对象也要删除的类关系。以问题和答案距离,一个答案对应一个问题。如果问题删除了,相应的答案也要删除。
事实上,我们在确定类关系的时候,往往会觉得非常复杂。因为,关联、聚合和组合之间有着超集关系。如下图所示: