設計模式之依賴倒轉原則(DIP)

2022-01-16 08:09:49 字數 1571 閱讀 1106

1.概念

dip:dependency inversion principle

抽象不應當依賴於細節,細節應當依賴於抽象(說通俗點也就是要針對介面程式設計,不要針對實現程式設計;或者要依賴於抽象,不要依賴於具體)。

2.為何叫「依賴倒轉」?

傳統的過程性系統的設計辦法傾向於使高層次的模組依賴於低層次的模組;抽象層次依賴於具體層次。倒轉原則則是把這個錯誤的依賴關係倒過來。

3.如何做到依賴倒轉?

以抽象方式耦合是依賴倒轉原則的關鍵。由於乙個抽象耦合關係總要涉及到具體類從抽象類繼承,並且需要保證在任何引用到基類的地方都可以改換為其子類,所以黎克特制代換原則是依賴倒轉原則的基礎不應當依賴於細節,細節應當依賴於抽象(或者要針對介面程式設計,不要針對實現程式設計;或者要依賴於抽象,不要依賴於具體)。

三種耦合關係:

零耦合:如果兩個類沒有耦合關係,就稱之為零耦合。

具體耦合:具體性耦合發生在兩個具體的(可例項化)類之間,經由乙個類對另乙個具體類的直接引用造成。

抽象耦合:抽象耦合關係發生在乙個具體類和乙個抽象類(或者介面)之間,使兩個必須發生關係的類之間存在有最大的靈活性。

依賴倒轉原則要求客戶端依賴於抽象耦合。

抽象不應當依賴於細節;細節應當依賴於抽象。

要針對介面程式設計,不要針對實現程式設計。

變數被宣告時的型別叫做變數的靜態型別,也叫做明顯型別,變數所引用的物件的真實型別叫做變數的實際型別。

程式在需要引用乙個物件時,應當盡可能的使用抽象型別作為變數的靜態型別,這就是針對介面程式設計的含義。

強內聚:像cpu一樣,別的廠商木有辦法造。因為看不見內部。

松耦合:像cpu的針腳一樣,主機板廠商知道怎麼造主機板能用cpu

「高內聚,低耦合」主要是闡述的物件導向系統中,各個類需要職責分離的思想。   

每乙個類完成特定的獨立的功能,這個就是高內聚。耦合就是類之間的互相呼叫關係,如果耦合很強,互相牽扯呼叫很多,那麼會牽一髮而動全身,不利於維護和擴充套件。  

類之間的設定應該要低耦合,但是每個類應該要高內聚.耦合是類之間相互依賴的尺度.如果每個物件都有引用其它所有的物件,那麼就有高耦合,這是不合乎要求的,因為在兩個物件之間,潛在性地流動了太多資訊.低耦合是合乎要求的:它意味著物件彼此之間更獨立的工作.低耦合最小化了修改乙個類而導致也要修改其它類的"連鎖反應". 內聚是乙個類中變數與方法連線強度的尺度.高內聚是值得要的,因為它意味著類可以更好地執行一項工作.低內聚是不好的,因為它表明類中的元素之間很少相關.成分之間相互有關聯的模組是合乎要求的.每個方法也應該高內聚.大多數的方法只執行乙個功能.不要在方法中新增'額外'的指令,這樣會導致方法執行更多的函式. 

推廣開來說,這個思想並不限於類與類之間的關係。模組和模組,子系統之間也都要遵守這個原則,才可以設計出延展性比較強的系統。

3.依賴倒轉原則的優缺點:

依賴倒轉原則雖然很強大,但卻是最不容易實現的。物件的建立很可能要使用物件工廠,以避免對具體類的直接引用,此原則的使用會導致大量的類。

依賴倒轉原則假定所有的具體類都是會變化的,這也不總是正確的,有一些具體類可能是相當穩定的,不會發生變化,為此沒有必要進行抽象。

設計模式之依賴倒轉原則

a.高層模組不應該依賴低層模組。兩個都應該依賴抽象。b.抽象不應該依賴細節。細節應該依賴抽象 物件導向開發時,為了使得常用 可復用,一般都會把這些 寫成許多的函式庫,我們在做專案時呼叫這些底層的 函式就可以了。比如我們做的專案大多低層模組。要訪問資料庫,所以我們就會把訪問資料庫的 寫成函式,每次做新...

設計模式 依賴倒轉原則

依賴倒轉原則又稱依賴倒置原則 抽象不應該依賴細節,細節應該依賴於抽象。說白了,就是針對介面程式設計,不要針對實現程式設計。依賴倒置原則包含三層含義 1 高層模組不應該依賴低層模組,兩者都應該依賴其抽象 2 抽象不應該依賴細節 3 細節應該依賴抽象。看了上面的解釋相信大家會和我一樣會有一些疑問在腦海裡...

設計模式 依賴倒轉原則

依賴倒轉原則解釋 抽象不應該依賴於細節,細節應該依賴於抽象。說通俗點也就是針對介面程式設計,不要針對實現程式設計。我們在做開發的時候,要訪問資料庫,就會把訪問資料庫的 寫成函式,每次去開發的時候呼叫這些函式就行了,其實這就叫高層模組依賴底層模組,違反了依賴倒轉原則。當我們做乙個新專案的時候,發現業務...