參考鏈接: Java中的關聯 | 組合和聚合
一.引言?
其實自己也不知道,在需求設計、架構設計、開發階段是否真正需要弄明白“關聯、聚合、組合”。原本計劃這篇博文寫“繼承“和”多態”,但是一翻閱資料,基本上都會把“繼承”和“組合”做一個簡單對比,于是乎就打算把“組合”的親戚“關聯”和“聚合”也一并總結一下。?
二.關聯、聚合和組合?
關聯強調的是“關系”,比如老師和學生之間的關系;? 聚合和組合強調的是“整體”與“部分”,就好像一個班級由班主任和多名學生組成等等,但是聚合和組合的區別在于:聚合關系中,部分是可以獨立于整體的,即非同一生命周期,比如汽車和輪胎的關系;而組合關系中,部分和整體是同一生命周期的,比如班級和班主任的關系。? ?
解釋下上面的類圖:? TClass類是班級類,一個班級擁有一個班主任Teacher,和多名學生Student——都屬于組合關系。? Student類是學生類,一個學生擁有一張課表Scedule——屬于關聯關系,因為課表并不是學生的一部分。? Scedule類是課表類,一張課表擁有一系列的課程Course——屬于聚合關系,因為課程本身是可以獨立存在不屬于任何一張課表。