1.單一職責原則
簡單總結:就一個類而言,應該只有一個引起它變化的原因,一個類中承擔的職責不宜多
如果 承擔的職責越多,可複用性越差
承擔的職責越多,各職責間耦合性越強,修改一個職責,都有影響到其它職的風險
是實現高內聚、低耦合的指導方針,它是最簡單但又最難運用的原則
2.開閉原則
簡單總結:一個軟件實體應該對擴展開放,對修改關閉。在不修改原有代碼的情況下進行擴展
把系統定義成一個相對穩定的抽象層,將不同行爲移至具體的實現層中完成。
使軟件具有較好的穩定性和可延續性。
抽象化是開閉原則的關鍵
3.里氏替換原則
簡單總結:所有引用基類的地方必須能透明地使用其子類的對象
在軟件中將一個基類對象替換成它的子類對象,程序將不會產生任何錯誤和異常,反過來則不成立
在程序中經量使用基類對對象進行定義,而在運行時再確定其子類型,用子類對象來替換父類對象
里氏代換原則是開閉原則的具體實現手段之一
4.依賴倒置原則
簡單總結:抽象不應該依賴於細節,細節應當依賴於抽象。要對接口編程,而不是針對實現編程。
使用接口和抽象類進行變量類型聲明,參數類型聲明,方法返回類型聲明,以及數據類型的轉換。而不用具體類來做這些事情。
針對抽象層編程,將具體類對象通過依賴注入的方式注入其它對象中(構造注入,設置注入(set方法),接口注入)
開閉原則是目標,里氏代換原則是基礎,依賴倒轉原則是手段
5.接口隔離原則
簡單總結:使用多個專門的接口,而不使用單一的總接口,客戶端不應該依賴於它不需要的接口
每個接口是一個獨立的較少,不幹不該乾的事,該乾的都得幹
給客戶端提供儘可能小的 接口,而不要提供大的總接口,僅僅提供客戶需要的行爲
需要注意控制接口的粒度,接口不能太小,如果太小會導致系統中接口氾濫,不利於維護;接口也不能太大,太大的接口將違背接口隔離原則,靈活性較差,使用起來很不方便
6.合成複用原則
簡單總結:儘量使用對象組合,而不是繼承來達到複用的目的
7.迪米特法則
簡單總結:一個對象應當對其他對象有儘可能少的瞭解
一個類應該對自己需要耦合或調用的類知道得最少,不關心被耦合或調用的類的內部實現,只負責調用你提供的方法
不要和“陌生人”說話、只與你的直接朋友通信----朋友指
(1) 當前對象本身(this);
(2) 以參數形式傳入到當前對象方法中的對象;
(3) 當前對象的成員對象;
(4) 如果當前對象的成員對象是一個集合,那麼集合中的元素也都是朋友;
(5) 當前對象所創建的對象
在類的結構設計上,每一個類都應當儘量降低其成員變量和成員函數的訪問權限
在類的設計上,只要有可能,一個類型應當設計成不變類;
在對其他類的引用上,一個對象對其他對象的引用應當降到最低