摘要:依賴倒置在面向對象設計中有一個重要的原則是依賴倒置,主要作用是解耦,讓對象與對象之間松耦合。現在根據依賴倒置原則對例子進行修改。
依賴倒置
在面向對象設計中有一個重要的原則是依賴倒置(Dependence Inversion Principle),主要作用是解耦,讓對象與對象之間松耦合。定義如下:高層模塊不應該依賴底層模塊,他們都應該依賴抽象。抽象不應該依賴于細節,細節應該依賴于抽象。
光看定義很難理解依賴倒置到底是什么意思,先舉一個簡單的例子。
有以下兩個類:
public class Dao { private MysqlConnection connection; public Dao(MysqlConnection connection) { this.connection = connection; } public void findAll() { connection.executeQuery("SELECT * FROM test"); } }
public class MysqlConnection { public void executeQuery(String sql) { System.out.println(sql); } }
Dao類通過調用MysqlConnection類的executeQuery方法執行sql語句,依賴關系如下圖所示:
這里就違反了依賴倒置原則,高層模塊DAO強耦合了底層模塊MysqlConnection。如果系統需要更換數據庫為SqlServer,我們就不得不去修改Dao類,增加一個SqlserverConnection類,這又違反了面向對象設計的開閉原則。例子中的Dao是一個不穩定、隨時會因為底層模塊的變更而出現BUG的類。
現在根據依賴倒置原則對例子進行修改。
public class Dao { private Connection connection; public Dao(Connection connection) { this.connection = connection; } public void findAll() { connection.executeQuery("SELECT * FROM test"); } }
public interface Connection { void executeQuery(String sql); }
public class MysqlConnection implements Connection { @Override public void executeQuery(String sql) { System.out.println(sql); } }
Dao類通過調用Connection接口的executeQuery方法執行sql語句,依賴關系如下圖所示:
修改后的Dao類依賴于Connection抽象接口,MysqlConnection類也以實現接口的方式依賴于Dao類。這時如果要更換為SqlServer數據庫,只要增加一個SqlserverConnection類并實現Connection接口就完成了,不需要去修改Dao類了,大大的降低了耦合度。
之所以要細節依賴于抽象,歸根結底是因為抽象是對細節的歸納和本質總結,細節可能會不停的變更,其本質卻不會變化。依賴倒置原則感覺和面向接口編程的思想是如出一轍的,同樣都是通過依賴抽象來降低耦合度,只是側重點不同。
只是看書可能學習效率并不是很高,還是需要多寫寫學到的東西,這就是這篇文章出現的理由了。可能會有錯誤或不全的地方,歡迎指出。
我的個人博客
參考資料:
那些年搞不懂的高深術語——依賴倒置?控制反轉?依賴注入?面向接口編程
【面向對象設計原則】之依賴倒置原則(DIP)
依賴倒置原則
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/71477.html
摘要:四依賴倒置原則依賴倒置原則簡介依賴倒置原則的英文名稱是,簡稱。依賴倒置原則的表現其實就是面向接口編程。依賴倒置原則的優點減少類間的耦合性,提高系統的穩定性。結合里氏替換原則使用接口負責定義屬性和方法,并且聲明與其他對象的依賴關系。 面向對象基本原則(2)- 里式代換原則與依賴倒置原則 面向對象基本原則(1)- 單一職責原則與接口隔離原則面向對象基本原則(2)- 里式代換原則與依賴倒置原...
摘要:面向對象設計的五大原則單一職責原則接口隔離原則開放封閉原則替換原則依賴倒置原則。主要是針對繼承的設計原則,繼承與派生多態是的主要特性。 面向對象設計的五大原則:單一職責原則、接口隔離原則、開放-封閉原則、替換原則、依賴倒置原則。這些原則主要是由Robert C.Martin在《敏捷軟件開發——原則、方法、與實踐》一書中總結出來,這五大原則也是23種設計模式的基礎。 單一職責原則 Sin...
摘要:依賴倒置原則是個設計原則中最難以實現的原則,它是實現開閉原則的重要途徑,依賴倒置原則沒有實現,就別想實現對擴展開放,對修改關閉。 1、單一職能原則(Single Responsibility Principle, SRP) 定義 There should never be more than one reason for a class to change.應該有且僅有一個原因引起類的...
摘要:為什么要采用面向對象編程解決問題更容易設計計算機程序就是為了解決人類的問題。面向對象編程需要對業務及代碼的架構是有一定的要求的。 1. 編程方式 我們目前的編程方式大體可以有以下三種編程方式: 順序編程 過程式編程 面向對象編程 在講面向對象編程時先講一下什么是順序編程,什么是過程式編程,什么是面向對象編程: 順序編程: 就是只用一個單線程去執行一段代碼,執行過程根據代碼依次從上...
摘要:前言本章我們要講解的是五大原則語言實現的第篇,依賴倒置原則。當應用依賴倒置原則的時候,關系就反過來了。在當靜態類型語言的上下文里討論依賴倒置原則的時候,耦合的概念包括語義和物理兩種。依賴倒置原則和依賴注入都是關注依賴,并且都是用于反轉。 前言 本章我們要講解的是S.O.L.I.D五大原則JavaScript語言實現的第5篇,依賴倒置原則LSP(The Dependency Invers...
閱讀 2986·2021-11-16 11:45
閱讀 5176·2021-09-22 10:57
閱讀 1773·2021-09-08 09:36
閱讀 1597·2021-09-02 15:40
閱讀 2514·2021-07-26 23:38
閱讀 1200·2019-08-30 15:55
閱讀 929·2019-08-30 15:54
閱讀 1217·2019-08-29 14:06