軟件設計筆記:依賴倒置原則

依賴倒置原則

  1. 高層模塊不該該依賴底層模塊,兩者都應該依賴抽象。
  2. 抽象不該該依賴具體實現,具體實現應該依賴抽象。

例如:JDBC 咱們在java開發中訪問數據庫,代碼並不直接依賴數據庫驅動,而是依賴JDBC,當應用程序須要更換數據庫,不須要修改任何代碼。這正是由於應用代碼,高層模塊,不依賴數據庫驅動,而是依賴抽象JDBC,而數據庫驅動,做爲底層模塊,也依賴JDBC。java

平常開發中,service層依賴DAO層,並非直接依賴DAO的具體實現,而是依賴DAO提供的抽象接口,但這並非依賴倒置,依賴倒置中,除了具體實現要依賴抽象,最重要的是抽象是屬於誰的抽象。數據庫

按照依賴倒置原則,接口的全部權是被倒置的,也就是說,接口被高層模塊定義,高層模塊擁有接口,底層模塊實現接口。不是高層模塊依賴底層模塊的接口,而是底層模塊依賴高層模塊的接口,從而實現依賴關係的倒置。 在上面的依賴層次中,每一層的接口都被高層模塊定義,由底層模塊實現,高層模塊徹底不依賴底層模塊,及時是底層模塊的接口。這樣,底層模塊的改動不會影響高層模塊,高層模塊的複用也不會依賴底層模塊。對於Service和DAO這個例子來講,就是Service定義接口,DAO實現接口,這樣才符合依賴倒置原則。編程

因此依賴倒置原則也被稱爲好萊塢原則:Dont't call me, I will call you. 即不要來調用我,我會調用你。Tomcat、Spring 都是基於這個原則設計出來的,應用程序不須要調用Tomcat或者Spring這樣的框架,而是框架調用應用程序。而實現這一特性的前提就是應用程序必須實現框架的接口規範,好比實現Servlet接口。框架

依賴倒置原則通俗說就是,高層模塊不依賴底層模塊,而是都是依賴抽象接口,這個抽象接口一般是由高層模塊定義,底層模塊實現。函數

遵循依賴倒置守則

  1. 應用代碼中多使用抽象接口,儘可能避免使用那些多變的具體實現類。
  2. 不要繼承具體類,若是一個類在設計之初不是抽象類,那麼儘可能不要去繼承它。對具體的繼承是一種強依賴關係,維護的時候難以改變。
  3. 不要重寫包含具體實現的函數

典型場景

依賴倒置原則最典型的使用場景就是框架的設計。設計

框架提供框架核心功能,好比HTTP處理,MVC等,並提供一組接口規範,應用程序只須要遵循接口規範編程,就能夠被框架調用。程序使用框架的功能,可是不調用框架的代碼,而是實現框架的接口,被框架調用,從而框架有更高的可複用性,被應用於各類軟件開發中。繼承

相關文章
相關標籤/搜索