小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

編程思維-基礎(chǔ)篇《設(shè)計模式原則-合成復(fù)用原則》

 敦厚書屋 2019-08-21

序言

“身體發(fā)膚,受之父母”這是我們沒有辦法改變的,此類的關(guān)系我們適合使用繼承,也完全的遵循了前面講過的編程思維-基礎(chǔ)篇《設(shè)計模式的原則-里式替換原則》,但是不分青紅皂白的過度使用繼承就是“啃老”。

繼承和復(fù)合都是實現(xiàn)開閉原則的重要方式,為什么講過度使用繼承就是啃老,帶著這個問題,我們看一下我們今天要了解的《設(shè)計模式的原則-合成復(fù)用原則》。

前世今生

合成復(fù)用原則(Composite Reuse Principle,CRP)又叫組合/聚合復(fù)用原則(Composition/Aggregate Reuse Principle,CARP)。它要求在軟件復(fù)用時,要盡量先使用組合或者聚合等關(guān)聯(lián)關(guān)系來實現(xiàn),其次才考慮使用繼承關(guān)系來實現(xiàn)。

合成復(fù)用原則的重要性

類的復(fù)用一般來講有兩種方式,一種是繼承一種是合成復(fù)用。兩者都是實現(xiàn)開閉原則的重要方式,但是使用繼承的時候需要嚴(yán)格的遵循《設(shè)計模式的原則-里式替換原則》。

繼承在使用方面相對來講簡單一些,但是也存在一定的問題。

  • 繼承復(fù)用破壞了類的封裝性。因為繼承會將父類的實現(xiàn)細(xì)節(jié)暴露給子類,父類對子類是透明的,所以這種復(fù)用又稱為“白箱”復(fù)用。
  • 子類與父類的耦合度高。父類的實現(xiàn)的任何改變都會導(dǎo)致子類的實現(xiàn)發(fā)生變化,這不利于類的擴(kuò)展與維護(hù)。
  • 它限制了復(fù)用的靈活性。從父類繼承而來的實現(xiàn)是靜態(tài)的,在編譯時已經(jīng)定義,所以在運(yùn)行時不可能發(fā)生變化。

采用組合或聚合復(fù)用時,可以將已有對象納入新對象中,使之成為新對象的一部分,新對象可以調(diào)用已有對象的功能,它有以下優(yōu)點。

  • 它維持了類的封裝性。因為成分對象的內(nèi)部細(xì)節(jié)是新對象看不見的,所以這種復(fù)用又稱為“黑箱”復(fù)用。
  • 新舊類之間的耦合度低。這種復(fù)用所需的依賴較少,新對象存取成分對象的唯一方法是通過成分對象的接口。
  • 復(fù)用的靈活性高。這種復(fù)用可以在運(yùn)行時動態(tài)進(jìn)行,新對象可以動態(tài)地引用與成分對象類型相同的對象。

合成復(fù)用實現(xiàn)方法

合成復(fù)用原則是通過將已有的對象納入新對象中,作為新對象的成員對象來實現(xiàn)的,新對象可以調(diào)用已有對象的功能,從而達(dá)到復(fù)用。

合成復(fù)用的舉例

汽車按“動力源”劃分可分為汽油汽車、電動汽車等;按“顏色”劃分可分為白色汽車、黑色汽車和紅色汽車等。如果同時考慮這兩種分類,其組合就很多。圖 1 所示是用繼淨(jìng):關(guān)系實現(xiàn)的汽車分類的類圖。

編程思維-基礎(chǔ)篇《設(shè)計模式原則-合成復(fù)用原則》

可以看出用繼承關(guān)系實現(xiàn)會產(chǎn)生很多子類,而且增加新的“動力源”或者增加新的“顏色”都要修改源代碼,這違背了開閉原則,顯然不可取。但如果改用組合關(guān)系實現(xiàn)就能很好地解決以上問題,其類圖如圖 2 所示。

編程思維-基礎(chǔ)篇《設(shè)計模式原則-合成復(fù)用原則》

下集預(yù)告

編程思維-基礎(chǔ)篇《設(shè)計模式的原則-原則總結(jié)篇》

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多