單一職責原則的目標是類,通過設計介面,使得類從功能上更加純粹,只有一種職責。
這樣設計介面後,整體會更加清晰明了,條理分明。不會有混亂的感覺。
總結起來很簡單,父類可以任意被替換成子類。
要達到這個目的,就需要子類在繼承父類的時候,子類你可以擴充新的功能,但不重寫父類的非抽象實現,不能改變父類的邏輯。
其實仔細想想,繼承或者說父類和子類理想的關係就應該是這樣:將共同的那部分放在父類,子類只做擴充套件。
同時,因為要實現「父類可以被替換成子類」這個目的。如果子類需要過載父類方法,就需要在行參上擴大,返回值上縮小。反之父類就無法替換成子類。
* 高層模組不應該依賴於低層模組,兩者都應該依賴於抽象。
* 抽象不應該依賴於具體
* 具體依賴於抽象
總結起來就是「面向介面程式設計」。
迪公尺特法則 又稱 最少知識原則,意思就是我只關心我依賴的物件。
比如:a依賴b,b又依賴c,且a不依賴c。
這時候a可以呼叫b的方法,但是a不能通過b來獲取c,然後呼叫c的方法。
這部分c的方法,理應封裝在b的內部,只需要a呼叫b的方法,間接完成了對
c的方法呼叫。
對擴充套件開放,對修改關閉。
開閉原則感覺是個綱領性東西,沒有具體的實現方式,只告訴你最終的目標。
如果你需要修改乙個類,最簡單的當然是直接上手改了。但如果這個類是個父類呢?直接改有可能會影響到其他類,而且如果這個類用的地方很多,就算不是父類,也需要重新測試,最主要的是破壞了已經經過了反覆測試,很健壯的**。
設計模式 6大設計原則
目錄 1 單一職責原則 2 黎克特制替換原則 3 依賴倒轉原則 4 介面隔離原則 5 迪公尺特法則 6 開閉原則 7 合成 聚合復用原則 single responsibility principle 應該有且僅有乙個原因引起類的變更。乙個介面包含了兩個或多個職責,而且這兩個或多個職責的變化不相互影...
設計模式 6大設計原則
前往目錄 擴充套件時不改變原有 乙個抽象類被多個子類繼承並實現抽象方法,呼叫者取得抽象類物件並呼叫方法,main中對呼叫者傳入不同子物件來實現切換 拓展時加子類即可 能使用父類的地方一定能使用子類,正方形不是長方形。假設長方形設定寬比高小時自增,正方形繼承長方形方法後會死迴圈,因此根據此原則不能使用...
設計模式 6大設計原則
單一職責原則 srp single responsibility principle 優點 建議 介面一定要做到單一職責,類的設計盡量做到只有乙個原因引起變化。定義 所有引用基類的地方必須能透明地使用其子類物件。四層含義 建議 類中呼叫其他類時,務必使用父類或介面 否則說明違背了此原則。若子類不能完...