如果說開閉原則是物件導向設計的目標的話,那麼依賴倒轉原則就是物件導向設計的主要實現機制之一,它是系統抽象化的具體實現。依賴倒轉原則是robert c. martin在2023年為「c++reporter」所寫的專欄engineering notebook的第三篇,後來加入到他在2023年出版的經典著作「agile software development, principles, patterns, and practices」一書中。依賴倒轉原則定義如下: 依賴倒轉原則(dependency inversion principle, dip):抽象不應該依賴於細節,細節應當依賴於抽象。換言之,要針對介面程式設計,而不是針對實現程式設計。
依賴倒轉原則要求我們在程式**中傳遞引數時或在關聯關係中,盡量引用層次高的抽象層類,即使用介面和抽象類進行變數型別宣告、引數型別宣告、方法返回型別宣告,以及資料型別的轉換等,而不要用具體類來做這些事情。為了確保該原則的應用,乙個具體類應當只實現介面或抽象類中宣告過的方法,而不要給出多餘的方法,否則將無法呼叫到在子類中增加的新方法。
在引入抽象層後,系統將具有很好的靈活性,在程式中盡量使用抽象層進行程式設計,而將具體類寫在配置檔案中,這樣一來,如果系統行為發生變化,只需要對抽象層進行擴充套件,並修改配置檔案,而無須修改原有系統的源**,在不修改的情況下來擴充套件系統的功能,滿足開閉原則的要求。
在實現依賴倒轉原則時,我們需要針對抽象層程式設計,而將具體類的物件通過依賴注入(dependencyinjection, di)的方式注入到其他物件中,依賴注入是指當乙個物件要與其他物件發生依賴關係時,通過抽象來注入所依賴的物件。常用的注入方式有三種,分別是:構造注入,設值注入(setter注入)和介面注入。構造注入是指通過建構函式來傳入具體類的物件,設值注入是指通過setter方法來傳入具體類的物件,而介面注入是指通過在介面中宣告的業務方法來傳入具體類的物件。這些方法在定義時使用的是抽象型別,在執行時再傳入具體型別的物件,由子類物件來覆蓋父類物件。
在實際程式設計中,我們一般需要做到如下3點:
依賴倒置原則的核心就是要我們面向介面程式設計,理解了面向介面程式設計,也就理解了依賴倒置。
java設計模式 設計原則
開閉原則也就是說對擴充套件開放,對修改關閉,在程式需要進行業務拓展的時候,不能修改程式原有的 體系,而是選擇以擴充套件的原則,實現乙個熱拔插的效果。用 來說,就是在開發過程中,我們更多的應該使用介面和抽象類。不要存在多於乙個導致類變更的原因,也就是說每個類都應該實現單一的職責,如若不然,就應該把類拆...
JAVA與模式 設計原則筆記
設計原則 開 閉 原則 open close principle 或者ocp 目標 乙個軟體實體應該對擴充套件開發,對修改say no 在設計乙個模組的時候,應當思考日後公升級過程中,如何不修改源 的情況下改變這個模組的行為 黎克特制代換原則 liskov substitution principl...
java設計模式原則
大話設計模式 單一職責原則 乙個類僅有乙個引起它變化的原因 開放 封閉原則 可擴充套件,不可修改 依賴倒轉原則 1 高層不應該依賴於低層模組,兩個都應該依賴於抽象 2 抽象不應該依賴於細節,細節應該依賴於抽象 李氏代換原則 lsp 子型別必須能夠替換掉他們的父型別 迪公尺特法則 lod 如果兩個類不...