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

10.1 合成和聚合的區(qū)別
聚合關(guān)系:
關(guān)聯(lián)關(guān)系的一種,是強的關(guān)聯(lián)關(guān)系。聚合是整體和個體之間的關(guān)系。

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

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

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

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

里氏代換原則是繼承復(fù)用的基石。

歡迎大家訪問我的個人網(wǎng)站 萌萌的IT人