最近1直在看設計模式,之前寫過1篇文章:設計模式中的關系在代碼中的實現
以后他們問我說:聚合和組合在代碼上怎樣表現誕生命期的不同。由于當時是真心不懂,不敢回答,現在有1點點心得,和大家分享1下。
聚合:表示兩個對象之間是整體和部份的弱關系,部份的生命周期可以超出整體。如電腦和鼠標。
?大話上的聚合:
?大話上的組合:
表示兩個對象之間是整體和部份的強關系,部份的生命周期不能超出整體,或說不能脫離整體而存在。組合關系的“部份”,是不能在整體之間進行同享的。
●異同點
共同點:他們都是屬于關聯,整體與部份的關系。
不同點:生命周期不同,聚合是獨立的,不隨整體共存亡的(生命周期不同步)。組合正好相反,與整體共存亡(生命周期同步)。
●代碼中的實現
?聚合
在代碼中的中的實現是比較靈活的,大雁聚合為雁群,只要大雁類是雁群的成員變量就好了。
代碼有兩種方式都是聚合:
第1種方式:這類方式1般用在大雁WideGoose是抽象類(父類)的時候,這時候候,就能夠傳入不同的子類,這樣就會使它調用的時候很靈活。
?組合關系
在代碼中就沒有這樣靈活了,它是強耦合的,它生命周期是同生同死的關系。我們知道1個對象被實例的時候就是我們意義上的“生”,因此我們就把組合的對象放在被組合對象的構造函數中:
我們學習東西的時候,很想1下子就都要全懂了,其實學習是1個不斷思考、不斷研究的東西。我們要做的是:知道它、研究它、會用它、交換它。