概述
最終就是 抽象 單一直則 最小化
單一職責原則(Single Responsibility Principle)
簡述
簡稱SPR 一個類只做一件事.
并不是說一個類只有一個函數,而是說這個類中的所有函數必須是高度相關的.高內聚.
優點
- 類的復雜度降低,實現什么職責有明確的定義
- 可讀性提高
- 可維護性提高
- 變更引起的風險降低.一個接口的修改只影響相應的實現類,對其他的接口無影響.
里氏替換原則(Liskov Substitution Principle)
簡述
面向對象語言三大特征是封裝,繼承,多態.
里氏替換原則簡單來說就是所有引用基類的地方必須能透明的使用其子類的對象.也就是說,只要有父類出現的地方子類就可以出現,并且用這個子類替換父類也不會產生任何錯誤和異常,但是反過來就不行,父類不一定能替代子類.
例如構造方法的參數是接口類型的,只要實現了這個接口的都可以調用這個構造方法創建對象
優點
- 代碼共享減少創作類的工作量,因為每個子類都擁有父類的所有方法和屬性
- 提高代碼重用度
- 提高代碼可擴展性,實現父類的方法就行了
- 提高產品和項目的開放性
缺點
- 繼承是入侵的,只要繼承就必須擁有父類的所有屬性和方法
- 降低代碼靈活性,子類必須擁有父類的所有屬性的方法,對子類多了些約束
- 增強了耦合性,當父類的常量,變量,方法等改變時要考慮到子類的修改.搞不好大量代碼需要重構.
依賴倒置原則(Dependence inversion Principle)
簡述
- 高層模塊不應該依賴低層模塊,兩者都應該依賴其抽象
- 抽象不應該依賴細節
- 細節應該依賴抽象
JAva中抽象就是指接口或抽象類,兩者都不能被實例化.實現或繼承他們產生的類就是細節,細節的特點是能被實例化.
模塊之間的依賴通過抽象發生,實現類與實現類之間不發生直接依賴關系,他們的依賴關系是通過接口或抽象類進行的.
面向接口編程是面向對象精髓之一.
優點
- 可拓展性好
- 耦合度低
開閉原則(Open-Close Principle)
簡述
java中最基礎的設計原則,指導我們如何建立一個穩定/靈活的系統.
定義:一個軟件實體,如類,模塊,函數都應該對擴展開放,對修改關閉.
在軟件生命周期內,迭代時盡量通過擴展的方式來實現變化,而不是通過修改執勤啊的已有代碼來實現.
優點
- 增加穩定性
- 可拓展性高
接口隔離原則(Interface Segregation Principle)
簡述
客戶端不應該依賴他不需要的接口.一個類對另一個類的依賴應該建立在最小的接口上.檔一個接口太大時,就要考慮分割成更小的接口.客戶端進需要指導與之相關的方法即可
優點
- 降低耦合性
- 提高代碼的可讀性
- 隱藏實現細節
迪米特原則(Law of Demeter)/最少知識原則(Least Knowledge Principle)
簡述
一個對象應該對其他對象有最少的了解.
類的內部如何實現,如何復雜都與調用者或依賴者沒有關系,調用者或依賴者只需要知道他需要的方法即可.
優點
- 降低復雜度
- 降低耦合度
- 增加穩定性