軟件設計原則:
1.單一職責原則(Single Responsibility Principle)
單一職責原則的定義是:“There should never be more than one reason for a class to change.”,也就是有且僅有一個原因引起類的變更。這樣可以降低類的復雜性,實現什么職責都有清晰明確的定義;可讀性提高;可維護性提高;變更引起的風險降低。
2.里氏替換原則(Liskov Substitution Principle)
“龍生龍,鳳生鳳,老鼠生來會打洞。”這個就是我們經常開發過程中會用到的繼承。里氏置換原則的定義是:Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it,只要父類能出現的地方子類就可以出現,而且替換為子類也不會產生任何錯誤或異常。這樣的話就要求子類必須完全實現父類的方法;覆蓋或實現父類的方法時輸入參數可以被放大,輸出結果可以被縮小(逆變協變)。采用里氏替換原則可以提高程序的健壯性,版本升級時也可以保持非常好的兼容性。
3.依賴倒置原則(Dependence Inversion Principle)
依賴倒置原則,模塊間的依賴通過抽象發生,實現類之間不發生直接的依賴關系,其依賴關系是通過接口或抽象類產生的;接口或者抽象類不依賴於實現類;實現類依賴與接口或抽象類。需要每個類盡量都有接口或者抽象類;變量的表面類型盡量是接口或者抽象類;任何類都不應該從具體類派生(超過兩層), 盡量不要復寫基類的方法。采用依賴倒置原則可減少類間的耦合性,提高系統的穩定性,降低並行開發引起的風險,提高代碼可讀性和可維護性。依賴也可以稱為注入,一般可以通過構造函數注入,屬性注入,接口注入。
4.接口隔離原則(Interface Segregation Principle)
接口隔離原則的定義是接口盡量細化,同時接口中的方法盡量少。需要一個接口只服務於一個子模塊或者業務邏輯;通過業務邏輯盡量壓縮接口中的方法;這樣可以提高內聚,降低耦合,重用代碼。
5.迪米特法則(Law of Demeter)
迪米特法則,也稱為最少知識原則,也就是一個對象應該對其他對象有最少的了解。需要只和朋友交流;朋友間也是有距離的;自己的就是自己的;如果一個類放在本類中,既不增加類間的關系,也對本類不產生負面影響,那就放置在本類中。類間解耦,弱耦合。
6.開閉原則(Open Closed Principle)
開閉原則,Software entities like classes, modules and functions should be open for extension but closed for modifications,軟件實體比如類,模塊,和函數應該對拓展開放,對修改關閉,也就是盡量通過拓展實體行為來實現變化。需要抽線約束,將相同的變化封裝到一個接口或抽象類,將不同的變化封裝到不同的接口或抽象類中。其實前面的5個原則都是開閉原則的指導設計工具和方法,開閉原則是他們的精神領袖。