1. 程式人生 > >設計模式原則:依賴倒置原則

設計模式原則:依賴倒置原則

1、什麼是依賴倒轉原則?

  所謂依賴倒置原則,就是不論高層元件和低層元件都應該依賴於抽象,而不是具體實現類。聽起來更像是“針對介面程式設計,而不是針對實現程式設計”,但是這裡依賴倒置原則更強調“抽象”的概念,不要讓高層元件依賴低層元件,更不能依賴具體實現類,都要依賴於抽象。依賴倒置原則的核心在於“面向介面程式設計”,目的在於”解耦“。

2、這裡的倒置是什麼意思呢?

  依賴倒置原則中的倒置是指我們的思想要和一般的“自頂向下”結構化設計思想相反。面向過程的設計方法是從頂端分析,然後到實現類,例如,簡單工廠模式中我們讓工廠生產產品,到是又不想讓工廠和具體實現類存在任何關係,否則就對具體實現類產生了依賴,這是我們不希望看到的結果。這時候我們就應該將思想倒置一下,不要從頂端開始,我們從具體的實現類開始,看看能夠抽象出什麼,然後一切都依賴抽象來進行,這樣就與我們的目標相近了。

3、為什麼有依賴倒轉原則?

  在面向過程中,往往是高層元件呼叫低層元件,這樣,高層元件就會依賴於低層元件,當低層元件發生劇烈變動時,高層元件也要跟著變動,就會倒置模組的複用性大大降低,並且大大提高開發成本,增加了軟體擴充套件、維護的複雜度。如下為面向過程的軟體開發呼叫圖:


  由圖可以看出,高層元件呼叫低層元件,即高層元件依賴於低層元件,當低層元件發生變化時,勢必會對高層元件產生影響。

  那麼我們應該怎樣改變這種情況呢?應用依賴倒轉原則可以解決這個問題,即面向介面程式設計。讓我們的程式依賴於抽象,實現的細節也依賴於抽象。即使實現細節不斷變動,只要抽象不變,客戶程式就不需要變化。這大大降低了客戶程式與實現細節之間的耦合度。面向介面示意圖如下:


  這樣,無論低層元件怎樣變化,只要抽象元件不發生變化,高層元件就不會發生變化,實現了客戶程式與實現細節的解耦。

4、舉例說明依賴倒置原則?

  (1)不符合依賴倒轉原則的類圖


  在這幅類圖中,動物工廠(高層元件)生產貓和狗(貓狗具體類屬於低層元件)時就要去呼叫貓和狗的構造方法,當我想增加生產魚的功能時,就要增加魚類,還要修改動物工廠類,這就違背了開閉原則。造成這種情況的原因就是因為動物工廠過於依賴具體動物類。

  (2)符合依賴倒轉原則的類圖


  在這幅類圖中,動物工廠(高層元件)生產貓和狗(貓狗具體類屬於低層元件)時依然需要呼叫貓和狗的構造方法,但這時候因為中間增加了抽象元件,我要增加生產魚的功能的時候只要增加魚類和魚工廠就行了,而不需要去修改已有的類。這符合開閉原則,增加了程式的可擴充套件性和可維護性。

  小結:依賴倒置原則中的”倒置“說的是要和麵向過程的思想倒置,用面向物件的思想去設計程式。值得注意的是,面向物件是一種思想,而不是說用了面向物件的程式語言,用類和物件寫程式碼就是面向物件了,不要掛著”面向物件“的羊頭,賣著”面向過程“的狗肉。只要開發程式,就要奔著將軟體做成一個易擴充套件的、能夠適應需求變化的軟體,這是我們一直追求的。