序言“身體發(fā)膚,受之父母”這是我們沒(méi)有辦法改變的,此類(lèi)的關(guān)系我們適合使用繼承,也完全的遵循了前面講過(guò)的編程思維-基礎(chǔ)篇《設(shè)計(jì)模式的原則-里式替換原則》,但是不分青紅皂白的過(guò)度使用繼承就是“啃老”。 繼承和復(fù)合都是實(shí)現(xiàn)開(kāi)閉原則的重要方式,為什么講過(guò)度使用繼承就是啃老,帶著這個(gè)問(wèn)題,我們看一下我們今天要了解的《設(shè)計(jì)模式的原則-合成復(fù)用原則》。 前世今生合成復(fù)用原則(Composite Reuse Principle,CRP)又叫組合/聚合復(fù)用原則(Composition/Aggregate Reuse Principle,CARP)。它要求在軟件復(fù)用時(shí),要盡量先使用組合或者聚合等關(guān)聯(lián)關(guān)系來(lái)實(shí)現(xiàn),其次才考慮使用繼承關(guān)系來(lái)實(shí)現(xiàn)。 合成復(fù)用原則的重要性類(lèi)的復(fù)用一般來(lái)講有兩種方式,一種是繼承一種是合成復(fù)用。兩者都是實(shí)現(xiàn)開(kāi)閉原則的重要方式,但是使用繼承的時(shí)候需要嚴(yán)格的遵循《設(shè)計(jì)模式的原則-里式替換原則》。 繼承在使用方面相對(duì)來(lái)講簡(jiǎn)單一些,但是也存在一定的問(wèn)題。
采用組合或聚合復(fù)用時(shí),可以將已有對(duì)象納入新對(duì)象中,使之成為新對(duì)象的一部分,新對(duì)象可以調(diào)用已有對(duì)象的功能,它有以下優(yōu)點(diǎn)。
合成復(fù)用實(shí)現(xiàn)方法合成復(fù)用原則是通過(guò)將已有的對(duì)象納入新對(duì)象中,作為新對(duì)象的成員對(duì)象來(lái)實(shí)現(xiàn)的,新對(duì)象可以調(diào)用已有對(duì)象的功能,從而達(dá)到復(fù)用。 合成復(fù)用的舉例汽車(chē)按“動(dòng)力源”劃分可分為汽油汽車(chē)、電動(dòng)汽車(chē)等;按“顏色”劃分可分為白色汽車(chē)、黑色汽車(chē)和紅色汽車(chē)等。如果同時(shí)考慮這兩種分類(lèi),其組合就很多。圖 1 所示是用繼淨(jìng):關(guān)系實(shí)現(xiàn)的汽車(chē)分類(lèi)的類(lèi)圖。 可以看出用繼承關(guān)系實(shí)現(xiàn)會(huì)產(chǎn)生很多子類(lèi),而且增加新的“動(dòng)力源”或者增加新的“顏色”都要修改源代碼,這違背了開(kāi)閉原則,顯然不可取。但如果改用組合關(guān)系實(shí)現(xiàn)就能很好地解決以上問(wèn)題,其類(lèi)圖如圖 2 所示。 下集預(yù)告編程思維-基礎(chǔ)篇《設(shè)計(jì)模式的原則-原則總結(jié)篇》 |
|
來(lái)自: 敦厚書(shū)屋 > 《百學(xué)不厭知多D》