设计模式之禅之六大设计原则-依赖倒置原则
依賴倒置原則
依賴倒置原則的原始定義是:
● 高層模塊不應該依賴低層模塊,兩者都應該依賴其抽象;
● 抽象不應該依賴細節;
● 細節應該依賴抽象。
那什么是抽象?什么又是細節呢?
---->在Java語言中,抽象就是指接口或抽象類,兩者都是不能直接被實例化的;細節就是實現類,實現接口或繼承抽象類而產生的類就是細節,其特點就是可以直接被實例化,也就是可以加上一個關鍵字new產生一個對象。依賴倒置原則在Java語言中的表現就是:
● 模塊間的依賴通過抽象發生,實現類之間不發生直接的依賴關系,其依賴關系是通過
接口或抽象類產生的;
● 接口或抽象類不依賴于實現類;
● 實現類依賴接口或抽象類。更加精簡的定義就是“面向接口編程”——OOD(Object-Oriented Design,面向對象設
計)的精髓之一。
依賴倒置的優點
---->減少類間的耦合性
---->提高系統的穩定性
---->降低并行開發引起的風險
---->提高代碼的可讀性和可維護性。
證明一個定理是否正確,有兩種常用的方法:一種是根據提出的論題,經過一番論證,推出和定理相同的結論,這是順推證法;還有一種是首先假設提出的命題是偽命題,然后推導出一個荒謬、與已知條件互斥的結論,這是反證法。我們今天就用反證法來證明依賴倒置原則是多么優秀和偉大
論題:依賴倒置原則可以減少類間的耦合性,提高系統的穩定性,降低并行開發引起的風險,提高代碼的可讀性和可維護性。
反論題:不使用依賴倒置原則也可以減少類間的耦合性,提高系統的穩定性,降低并行開發引起的風險,提高代碼的可讀性和可維護性。
Driver類
package com.yeepay.sxf.sj4;
/**
?* 司機
?* @author sxf
?*
?*/
public class Driver {
??????? public void dirverCar(Benchi benchi){
??????????????? System.out.println("Driver.dirverCar(人開車)");?????? ?
??????????????? benchi.run();
??????? }
}
Car類
package com.yeepay.sxf.sj4;
/**
?* 奔馳
?* @author sxf
?*
?*/
public class Benchi {
??????? public void run(){
??????????????? System.out.println("Benchi.run(奔馳奔跑)");
??????? }
}
Client類
??????? public static void main(String[] args) {
??????????????? Benchi vBenchi=new Benchi();
??????????????? Driver diiDriver=new Driver();
??????????????? diiDriver.dirverCar(vBenchi);
??????? }
(1)如果人再想開寶馬,則不靈活。耦合度大。抽象,面向接口編程,可以降低耦合度。
(2)大型項目。人分模塊開發。高模塊,不需要等待低模塊開發完成,才能開發。只需要低模塊的接口即可。
抽象是對實現的約束,對依賴者而言,也是一種契約,不僅僅約束自己,還同時約束自己與外部的關系,其目的是保證所有的細節不脫離契約的范疇,確保約束雙方按照既定的契約(抽象)共同發展,只要抽象這根基線在,細節就脫離不了這個圈圈,始終讓你的對象做到“言必信,行必果”。
依賴的三種寫法
第一:構造函數傳遞依賴對象
第二:Setter方法傳遞依賴對象
第三:接口聲明依賴對象
最佳實踐
依賴倒置原則的本質就是通過抽象(接口或抽象類)使各個類或模塊的實現彼此獨立,不互相影響,實現模塊間的松耦合,我們怎么在項目中使用這個規則呢?只要遵循以下的幾個規則就可以:
● 每個類盡量都有接口或抽象類,或者抽象類和接口兩者都具備
??????? -->這是依賴倒置的基本要求,接口和抽象類都是屬于抽象的,有了抽象才可能依賴倒置。
● 變量的表面類型盡量是接口或者是抽象類
??????? -->很多書上說變量的類型一定要是接口或者是抽象類,這個有點絕對化了,比如一個工具
類,xxxUtils一般是不需要接口或是抽象類的。還有,如果你要使用類的clone方法,就必須
使用實現類,這個是JDK提供的一個規范。
● 任何類都不應該從具體類派生
??????? -->繼承不得到超過兩層。事無絕對。但可以追求完美。
● 盡量不要覆寫基類的方法
??????? -->如果基類是一個抽象類,而且這個方法已經實現了,子類盡量不要覆寫。類間依賴的是抽象,覆寫了抽象方法,對依賴的穩定性會產生一定的影響。
● 結合里氏替換原則使用
總結
以上是生活随笔為你收集整理的设计模式之禅之六大设计原则-依赖倒置原则的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Present算法verilog设计实现
- 下一篇: 数据采集串口通信系统verilog设计和