第10章 合成/聚合復用原則(CARP)
合成/聚合復用原則:在一個新的對象里面使用一些已有的對象,使之成為新對象的一部分;新的對象通過向這些對象的委派達到復用已有功能的目的。
簡言之:要盡量使用合成/聚合,盡量不要使用繼承。

10.1 合成和聚合的區別
聚合關系:
關聯關系的一種,是強的關聯關系。聚合是整體和個體之間的關系。

合成關系:
關聯關系的一種,是比聚合關系強的關系。它要求普通的聚合關系中代表整體的對象負責代表部分的對象的生命周期,合成關系是不能共享的。

10.2 復用的基本種類
1. 合成/聚合復用
好處:
1)新對象存取成分對象的惟一方法是通過成分對象的接口。
2)這種復用是黑箱復用,因為成分對象的內部細節是新對象所看不見的。
3)這種復用支持包裝。
4)這種復用所需的依賴較少。
5)每一個新的類可以將焦點集中在一個任務上。
6)這種復用可以在運行時間內動態進行,新對象可以動態地引用與成分對象類型相同的對象。
主要缺點:通過使用這種復用建造的系統會有較多的對象需要管理。

2. 繼承
優點:
1)新的實現較為容易,因為超類的大部分功能可以通過繼承關系自動進入子類。
2)修改或擴展繼承而來的實現較為容易。
缺點:
1)繼承復用破壞包裝,因為繼承將超類的實現細節暴露給子類。
2)如果超類的實現發生改變,那么子類的實現也不得不發生改變。
3)從超類繼承而來的實現是靜態的,不可能在運行時間內發生改變,因此沒有足夠的靈活性。

10.3
區分“Has-A”與“Is-A”
“Is-A”代表一個類是另一個類的一種;
“Has-A”代表一個類是另一個類的一個角色,而不是另一個類的一個特殊種類。

里氏代換原則是繼承復用的基石。

歡迎大家訪問我的個人網站 萌萌的IT人