6大設計原則:
單一職責原則SRP
應該有卻僅有一個原因引起類的變更,即類最好只實現一種功能。高內聚。單一職責的實現方式是一個職責一個接口。
單一職責適用於類和接口,同樣適用於方法,一個接口應該只有一個職責,一個方法也應該只做好一件事。
里氏替換原則LSP
所有能使用父類的地方必須能透明地使用其子類的對象。子類必須完全實現父類的方法,如果子類不能完整實現父類的方法,則建議使用依賴,聚集,組合等關係代替繼承。
覆蓋或實現父類的方法時,輸入參數可以被放大,輸出結果可以被縮小。
依賴倒置原則DIP
實現類之間不發生直接的依賴關係,依賴關係通過接口或抽象類產生接口和抽象類不應依賴實現類
實現類依賴接口或抽象類
每個類儘量都有接口或抽象類,變量的表面類型儘量是接口或抽象類,任何類都不應該從具體類派生。
每個類儘量都有抽象,變量的表面類型儘量是抽象
依賴導致就是使用抽象間的依賴取代具體對象的依賴
接口隔離原則ISP
類間的依賴關係應該建立在最小的接口上,即接口儘量細化,接口內方法儘可能少,提供給每個模塊應該是單一接口
拆分接口時要滿足單一職責原則,不能過度拆分
接口要高內聚,減少對外交互
客戶端不應該依賴它不需要的接口
迪米特原則LOD
對象應對其他對象有最少的瞭解,只與直接的朋友交流出現在成員變量,方法的輸入輸出函數中的類稱爲成員朋友類,而出現在方法體內部的類不屬於朋友類
方法儘量不引用類中不存在的對象
如果一個方法放在本類中,既不增加類間關係,也對本類不產生負面影響,就放置在本類中。類間解耦,弱耦合,高內聚
開閉原則OCP
一個軟件實體如類,模塊和函數應該對擴展開放,對修改關閉
儘量通過擴展軟件實體的行爲來實現變化,而不是修改已有代碼
參數類型,引用對象儘量使用抽象