一、開閉原則(是面向對象開發中最基礎的原則,它指導建立更加穩定靈活的系統) 開閉原則是對擴展和修改行為的一個原則,指的是軟體中的函數、類、模塊應該對擴展開放,對修改關閉。強調的是用抽象構建框架,用實現擴展細節。常用於解決的問題如:更新版本時,儘量在不修改源代碼,但增加新功能。 二、依賴倒置 依賴倒置 ...
一、開閉原則(是面向對象開發中最基礎的原則,它指導建立更加穩定靈活的系統)
開閉原則是對擴展和修改行為的一個原則,指的是軟體中的函數、類、模塊應該對擴展開放,對修改關閉。強調的是用抽象構建框架,用實現擴展細節。常用於解決的問題如:更新版本時,儘量在不修改源代碼,但增加新功能。
二、依賴倒置
依賴倒置是指設計系統代碼結構時,高層模塊不依賴底層模塊,它們都應依賴於其抽象。細節應該依賴抽象。通過依賴倒置,可減少系統之間模塊的耦合性,提高系統的穩定性,提高系統的可讀性與可維護性,降低修改程式帶來的風險。
ps:以抽象為基準設計的架構要比以細節為基準設計的架構穩定很多。所以在拿到需求時,要面向介面編程,先頂層再細節來設計代碼結構。
依賴有依賴註入(最常用)、構造方法註入(單例不可用)、setter註入(單例多用)。
三、單一職責原則
是指一個類只負責一個功能,不要存在多餘一個導致類變更的原因。假設一個類負責兩個職責,修改一個可能會影響另一個功能發生故障。只負責一個類可降低類的複雜度,提高類的可讀性,提高系統的可維護性,降低變更引起的風險。
四、介面隔離原則
是指用多個專門的介面,而不是使用單一的總介面,客戶端不應該依賴他不需要的介面。這個原則指導我們在設計介面時應註意以下幾點:
1.一個類對一個類的依賴應該建立在最小的基礎上
2.建立單一介面,不應建立臃腫的介面。
3.細化介面功能,每個介面內方法要儘量少(不是越少越好,要適度)
介面隔離原則符合我們所說的“高內聚,低耦合”的思想,從而使類具有很好的可維護性、可讀性、可擴展性。我們在設計介面時,要多花時間去思考業務模型,包括以後可能要修改的還要去做一些預判。所以,對於抽象,對業務模型的理解是最重要的。
五、迪米特法則
是指一個對象應該保持對其他對象最少的瞭解,也叫最少瞭解法則,儘量降低類與類之間的耦合。它強調之和朋友交流,不和陌生人說話。如類中的成員變數、函數參數、函數返回值都是朋友,函數內部的對象是陌生人。
六、里氏替換原則
里氏替換原則可以理解為一個軟體實體如果能適用父類的話,一定也能適用子類。所有能引用父類的地方都能透明的使用子類對象。子類可替換父類對象而使程式邏輯不變。引申為:子類可擴展父類的方法,但不能覆蓋父類原有的功能。
總結為:1.子類可以實現父類的抽象方法,但不能父類的非抽象方法。
2.子類可增加自己特有的方法。
3.當子類的方法重載父類的方法時,子類的前置參數(入參)相比父類更寬鬆。
4.當子類的方法重載父類的方法時,子類的後置參數(函數返回值)相比父類更嚴格或相等。
七、合成復用原則
指儘量使用對象組合、聚合,而不是繼承來實現軟體復用的目的。這樣可以使類更加靈活、降低類與類之間的耦合度。
繼承叫白箱復用,會將父類的實現細節全部暴露給子類。合成復用叫黑箱復用,對類以外是無法獲取到實現細節的。
總結:
我們在寫代碼時,要根據實際情況(人力、時間、成本)綜合考慮,不需刻意追求完美,要在適當的場景考慮設計原則,體現的是一種平衡取捨,來幫助我們設計出更優雅的代碼結構。