對擴充套件開放,對修改關閉。
業務**持有頂層抽象(依賴介面,而不直接依賴具體實現),後續根據業務場景注入具體實現類,方便擴充套件與維護。
每個介面、類、方法只承擔一種業務職能。降低類的複雜度,提高可維護性以及便於後期擴充套件。
每種功能用專門的介面定義,不在乙個介面中定義太多行為。子類實現需要什麼行為時,可以implement多個需要的行為介面。
每個類的全域性屬性、方法傳參等屬於最小知道範圍,其餘方法內傳遞或新增的物件等屬於耦合物件,要盡量降低耦合和依賴,不要新增太多耦合依賴物件。
子類實現的傳參a,替換成傳參b後,結果不會改變,則b是a的子類,這種行為符合黎克特制替換原則,可以避免後續繼承氾濫等問題。
子類不能覆蓋父類非抽象方法,可以新增自己的方法進行擴充套件。這樣可以避免後續該方法職能氾濫問題。
子類實現的父類方法的返回值應該比父類方法的返回值更嚴格或者一樣。
盡量使用組合/聚合等方式持有物件,避免使用繼承。減輕類與類內部功能的耦合性,只需要知道物件就可以了。一般定義物件介面,後期根據業務場景注入具體實現的物件,呼叫使用它的方法,降低具體業務邏輯與實際實現的耦合。
最常見的7種物件導向設計原則
設計原則名稱 定義 使用頻率 單一職責原則 single responsibility principle,srp 乙個類只負責乙個功能領域中的相應職責 開閉原則 open closed principle,ocp 軟體實體應對擴充套件開放,而對修改關閉 黎克特制代換原則 liskov substi...
7種設計壞味道和11種原則
7種設計壞味道 1.僵化性 很難對系統進行改動,因為每個改動都會迫使許多對系統其他部分的其它改動。2.脆弱性 對系統的改動會導致系統中和改動的地方在概念上無關的許多地方出現問題。3.牢固性 很難解開系統的糾結,使之成為一些可在其他系統中重用的元件。4.粘滯性 做正確的事情比做錯誤的事情要困難。5.複...
7種設計壞味道和11種原則
7種設計壞味道 1.僵化性 很難對系統進行改動,因為每個改動都會迫使許多對系統其他部分的其它改動。2.脆弱性 對系統的改動會導致系統中和改動的地方在概念上無關的許多地方出現問題。3.牢固性 很難解開系統的糾結,使之成為一些可在其他系統中重用的元件。4.粘滯性 做正確的事情比做錯誤的事情要困難。5.複...