依賴倒轉(zhuǎn)原則(Dependence Inversion Principle,簡稱DIP)講的是:
1)高層模塊不應(yīng)該依賴底層模塊,兩個(gè)都應(yīng)該依賴抽象。
2)抽象不應(yīng)該依賴細(xì)節(jié),細(xì)節(jié)應(yīng)該依賴抽象。
依賴倒轉(zhuǎn)的另外一種表述是:要針對接口編程,不要針對實(shí)現(xiàn)編程。
也就是說,應(yīng)該使用 java 接口或抽象 java 類進(jìn)行變量的類型聲明、參量的類型聲明、方法的返回類型聲明、以及數(shù)據(jù)類型的轉(zhuǎn)換等;
不應(yīng)該使用具體的 java 類型進(jìn)行變量的類型聲明、參量的類型聲明、方法的返回類型聲明、以及數(shù)據(jù)類型的轉(zhuǎn)換等。
在面對對象中,兩個(gè)類可能發(fā)生的幾種耦合(依賴)關(guān)系:
1)零耦合 : 兩個(gè)類沒有發(fā)生耦合關(guān)系。
2)具體耦合: 具體耦合關(guān)系發(fā)生在兩個(gè)具體的類之間,經(jīng)由一個(gè)類引用另一個(gè)類造成。
3)抽象耦合: 抽象耦合發(fā)生在一個(gè)具體類和一個(gè)抽象之間或者 JAVA 接口之間,使兩個(gè)必須發(fā)生關(guān)系的類之間存在最大的靈活性。
DIP(依賴倒轉(zhuǎn)原則)要求客戶端依賴抽象耦合。
傳統(tǒng)的過程性系統(tǒng)的設(shè)計(jì)傾向于使高層次的模塊依賴于低層次的模塊,抽象層次依賴于具體層次。
依賴倒轉(zhuǎn)原則就是要把這個(gè)錯(cuò)誤的依賴關(guān)系倒轉(zhuǎn)過來,這也就是“依賴倒轉(zhuǎn)原則”的來由。
如下簡單的示意圖所示:
