設計原則
單一職責原則(SRP,single responsibility principle)
定義:一個類,應該只有一個引起它變化的原因:即一個類應該只有一個職責。
優點:
1. 降低類的複雜性
2. 提高類的可讀性
3. 提高代碼的可維護性和複用性
4. 降低因變更引起的風險
里氏替換原則(Liskov Substitution Principle)
定義:子類可以替換父類的位置,並且不影響程序
優勢:里氏替換原則爲繼承定義了規範:
1. 子類必須完全實現父類的方法
2. 子類可以有自己的定製邏輯
3. 覆蓋或實現父類的方法時入參可以被放大;
4. 覆蓋或實現父類的方法時輸出結果可以被縮小;
在設計模式中體現里氏替換原則的幾個模式:
1. 策略模式
2. 組合模式
3. 代理模式
依賴倒置原則(Dependence Inversion Principle,簡稱DIP)
定義:高層模塊不應該依賴底層模塊,兩者都依賴其抽象;抽象不依賴細節,細節應該依賴抽象;
接口隔離原則(Interface Segregation Principle,簡稱ISP)
定義:客戶端不應該依賴它不需要的接口;一個類對另一個類的依賴應該建立在最小的接口上
例子:比如快遞系統,
在門戶網站上只可以查到快遞訂單信息;
第三方商城可以創建、查詢、刪除快遞訂單信息;
管理後臺可以批量增刪改查快遞訂單;
那麼門戶網站、第三方商城、管理後臺依賴的接口應該設計成不一樣的。
這時需要設計三個Interface,如下:
代碼設計及實現如下:
迪米特原則(Law of Demeter 簡稱LoD)
定義:一個對象應當對其他對象儘可能少的瞭解。不要跟陌生人說話。
舉例:
User、Order、Product這三個對象,關係:User只與Order相關、Order與Product相關、User與Product無關。
這時User如果想知道某個Order總價格時,應該調用訂單的getPrice()方法,
而不是在User對象中獲取Order的所有Product的價格相加;(用戶不需要直接操作商品相關的信息)
開閉原則(open-Closed Principle 簡稱OCP)
定義:軟件應該對擴展開放,對修改關閉。
作用:
1. 提高複用性:代碼邏輯粒度越細,被複用的可能性越大
2. 提高可維護性:代碼粒度小,邏輯容易被理解
3. 提高靈活性:添加新功能時不會影響到舊的邏輯
4. 易於測試:代碼粒度小,單元測試覆蓋更全面