第10章 合成/聚合復(fù)用原則(CARP)
合成/聚合復(fù)用原則:在一個(gè)新的對(duì)象里面使用一些已有的對(duì)象,使之成為新對(duì)象的一部分;新的對(duì)象通過向這些對(duì)象的委派達(dá)到復(fù)用已有功能的目的。
簡(jiǎn)言之:要盡量使用合成/聚合,盡量不要使用繼承。
10.1 合成和聚合的區(qū)別
聚合關(guān)系:
關(guān)聯(lián)關(guān)系的一種,是強(qiáng)的關(guān)聯(lián)關(guān)系。聚合是整體和個(gè)體之間的關(guān)系。

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

10.2 復(fù)用的基本種類
1. 合成/聚合復(fù)用
好處:
1)新對(duì)象存取成分對(duì)象的惟一方法是通過成分對(duì)象的接口。
2)這種復(fù)用是黑箱復(fù)用,因?yàn)槌煞謱?duì)象的內(nèi)部細(xì)節(jié)是新對(duì)象所看不見的。
3)這種復(fù)用支持包裝。
4)這種復(fù)用所需的依賴較少。
5)每一個(gè)新的類可以將焦點(diǎn)集中在一個(gè)任務(wù)上。
6)這種復(fù)用可以在運(yùn)行時(shí)間內(nèi)動(dòng)態(tài)進(jìn)行,新對(duì)象可以動(dòng)態(tài)地引用與成分對(duì)象類型相同的對(duì)象。
主要缺點(diǎn):通過使用這種復(fù)用建造的系統(tǒng)會(huì)有較多的對(duì)象需要管理。
2. 繼承
優(yōu)點(diǎn):
1)新的實(shí)現(xiàn)較為容易,因?yàn)槌惖拇蟛糠止δ芸梢酝ㄟ^繼承關(guān)系自動(dòng)進(jìn)入子類。
2)修改或擴(kuò)展繼承而來的實(shí)現(xiàn)較為容易。
缺點(diǎn):
1)繼承復(fù)用破壞包裝,因?yàn)槔^承將超類的實(shí)現(xiàn)細(xì)節(jié)暴露給子類。
2)如果超類的實(shí)現(xiàn)發(fā)生改變,那么子類的實(shí)現(xiàn)也不得不發(fā)生改變。
3)從超類繼承而來的實(shí)現(xiàn)是靜態(tài)的,不可能在運(yùn)行時(shí)間內(nèi)發(fā)生改變,因此沒有足夠的靈活性。
10.3
區(qū)分“Has-A”與“Is-A”
“Is-A”代表一個(gè)類是另一個(gè)類的一種;
“Has-A”代表一個(gè)類是另一個(gè)類的一個(gè)角色,而不是另一個(gè)類的一個(gè)特殊種類。
里氏代換原則是繼承復(fù)用的基石。