前言 我們終於學習最後一個設計原則了,其實博主更新的還是挺慢的,因為我想一個一個吃透以後再繼續學習,切記不要囫圇吞棗。 基本介紹 其實這個能說的內容很少,就是: 儘量使用合成/聚合的方式,而不是使用繼承 為什麼要這樣做?有一下兩點原因: 1. 通過繼承來進行復用的主要問題在於繼承復用會破壞系統的封裝 ...
前言
我們終於學習最後一個設計原則了,其實博主更新的還是挺慢的,因為我想一個一個吃透以後再繼續學習,切記不要囫圇吞棗。
基本介紹
其實這個能說的內容很少,就是:儘量使用合成/聚合的方式,而不是使用繼承
為什麼要這樣做?有一下兩點原因:
- 通過繼承來進行復用的主要問題在於繼承復用會破壞系統的封裝性,因為繼承會將基類的實現細節暴露給子類,由於基類的內部細節通常對子類來說是可見的,所以這種復用又稱“白箱”復用,如果基類發生改變,那麼子類的實現也不得不發生改變;從基類繼承而來的實現是靜態的,不可能在運行時發生改變,沒有足夠的靈活性;而且繼承只能在有限的環境中使用(如類沒有聲明為不能被繼承)。
- 由於組合或聚合關係可以將已有的對象(也可稱為成員對象)納入到新對象中,使之成為新對象的一部分,因此新對象可以調用已有對象的功能,這樣做可以使得成員對象的內部實現細節對於新對象不可見,所以這種復用又稱為“黑箱”復用,相對繼承關係而言,其耦合度相對較低,成員對象的變化對新對象的影響不大,可以在新對象中根據實際需要有選擇性地調用成員對象的操作;合成復用可以在運行時動態進行,新對象可以動態地引用與成員對象類型相同的其他對象。
這個跟里氏替換原則還是挺像的,里氏替換原則建議我們不要重寫父類的方法。這個就更直接乾脆了,乾脆你也別繼承算了。省的惹出一系列的事故出來。
總結
設計原則系列到這裡就告一段落了,後面我們將更新設計模式新的系列—— 24中種具體的設計模式。但是在更新這個系列之前我們還有一個系列就是看懂UML圖,我相信很多人對於UML圖是不怎麼看的懂的。對於依賴,組合,聚合,泛化等等都還是一知半解。後續待我一一道來。
哪有什麼歲月靜好,大家都是在負重前行。
各位,努力,奮鬥!