物件導向設計原則 依賴倒置原則

2021-10-02 09:23:04 字數 1717 閱讀 8289

依賴倒置原則(dependence inversion principle,dip)

依賴倒置原則的原始定義為:高層模組不應該依賴低層模組,兩者都應該依賴其抽象;抽象不應該依賴細節,細節應該依賴抽象。

其核心思想是:要面向介面程式設計,不要面向實現程式設計。

依賴倒置原則是實現開閉原則的重要途徑之一,它降低了客戶與實現模組之間的耦合。由於在軟體設計中,細節具有多變性,而抽象層則相對穩定,因此以抽象為基礎搭建起來的架構要比以細節為基礎搭建起來的架構要穩定得多。這裡的抽象指的是介面或者抽象類,而細節是指具體的實現類。

依賴倒轉原則要求我們在程式**中傳遞引數時或在關聯關係中,盡量引用層次高的抽象層類,即使用介面和抽象類進行變數型別宣告、引數型別宣告、方法返回型別宣告,以及資料型別的轉換等,而不要用具體類來做這些事

使用介面或者抽象類的目的是制定好規範和契約,而不去涉及任何具體的操作,把展現細節的任務交給它們的實現類去完成。

降低類間的耦合性。

提高系統的穩定性。

減少並行開發引起的風險。

提高**的可讀性和可維護性。

依賴倒置原則的目的是通過要面向介面的程式設計來降低類間的耦合性,所以我們在實際程式設計中只要遵循以下4點,就能在專案中滿足這個規則。

每個類盡量提供介面或抽象類,或者兩者都具備。

變數的宣告型別盡量是介面或者是抽象類。

任何類都不應該從具體類派生。

使用繼承時盡量遵循黎克特制替換原則。

案例1開發人員在開發某crm系統時發現:該系統經常需要將儲存在txt或excel檔案中的客戶資訊轉存到資料庫中,因此,需要進行資料格式轉換。在客戶資料操作類中將呼叫資料格式轉換類的方法實現格式和資料插入操作,初始設計方案結構如圖1

在編碼實現圖一所示結構時,開發人員發現該設計方案存在乙個非常嚴重的問題,由於每次轉換資料時資料**不一定相同,因此需要更換資料轉換類,如:有時候需要將txtdataconvertor改為exceldataconvertor,此時,需要修改customerdao的源**,而且在引入並使用新的資料轉換類時也不得不修改customerdao的源**,系統擴充套件性較差,違反了開閉原則

優化:由於customerdao針對具體資料轉換類程式設計,因此在增加新的資料轉換類或更新資料轉換類時不得不修改customerdao的源**,可以通過引入抽象資料轉換類解決該問題,在引入抽象資料轉換類dataconvertor之後,customerdao針對抽象類dataconvertor程式設計,而將具體資料轉換類名儲存在配置檔案中,符合依賴倒轉原則。根據黎克特制替換原則,程式執行時,具體資料轉換類物件將替換dataconvertor型別的物件。更換具體資料轉換類時無需修改源**,只需要修改配置檔案,如果需要增加新的具體資料轉換類,只要將新增資料轉換類作為dataconvertor的子類並修改配置檔案即可,原有**無需做任何修改,滿足開閉原則

在上述重構過程中,我們使用了開閉原則、黎克特制替換原則和依賴倒轉原則,在大多數情況下,這三個設計原則會同時出現,開閉原則是目標,黎克特制替換原則是基礎,依賴倒轉原則是手段,他們相輔相成,互相補充,目標一致,只是分析問題時所站角度不同而已

物件導向原則 依賴倒置原則

我寫這個自然段的時候,還沒有具體的看依賴倒置的含義。也就是不知者,不知者就算理解錯了也無罪哈哈。我現在有三個疑問,何為依賴,何為倒置 因為我感覺這個名字起得,有點讓人不太好理解!依賴為何倒置?目前在我看來,依賴關係,是乙個物件作為另乙個類的某個方法的引數,那麼他倆是依賴關係。那麼倒置是什麼含義?與我...

依賴倒置原則 物件導向設計原則之依賴倒置原則

依賴倒置原則的定義 依賴倒置原則 dependence inversion principle,dip 是 object mentor 公司總裁羅伯特 馬丁 robert c.martin 於 1996 年在 c report 上發表的文章。依賴倒置原則的原始定義為 高層模組不應該依賴低層模組,兩者...

物件導向設計原則四 依賴倒置原則

依賴倒置原則 dip 定義 高層模組不應該依賴底層模組,兩者都應該依賴其抽象 抽象不應該依賴細節 細節應該依賴抽象。好處 穩定性 可維護性 可擴充套件性。概述 di就是依賴倒置的意思,也可稱為控制反轉,我們以前編寫結構化的程式當中,也就是c語言這樣的語言時,高層模組依賴於底層模組,也就是呼叫者和被呼...