Java與設計模式(五)設計原則--依賴倒置原則

一、定義

如果說開閉原則是面向對象設計的目標的話,那麼依賴倒轉原則就是面向對象設計的主要實現機制之一,它是系統抽象化的具體實現。依賴倒轉原則是Robert C. Martin在1996年爲“C++Reporter”所寫的專欄Engineering Notebook的第三篇,後來加入到他在2002年出版的經典著作“Agile Software Development, Principles, Patterns, and Practices”一書中。依賴倒轉原則定義如下: 依賴倒轉原則(Dependency Inversion Principle, DIP):抽象不應該依賴於細節,細節應當依賴於抽象。換言之,要針對接口編程,而不是針對實現編程。

依賴倒轉原則要求我們在程序代碼中傳遞參數時或在關聯關係中,儘量引用層次高的抽象層類,即使用接口和抽象類進行變量類型聲明、參數類型聲明、方法返回類型聲明,以及數據類型的轉換等,而不要用具體類來做這些事情。爲了確保該原則的應用,一個具體類應當只實現接口或抽象類中聲明過的方法,而不要給出多餘的方法,否則將無法調用到在子類中增加的新方法。

在引入抽象層後,系統將具有很好的靈活性,在程序中儘量使用抽象層進行編程,而將具體類寫在配置文件中,這樣一來,如果系統行爲發生變化,只需要對抽象層進行擴展,並修改配置文件,而無須修改原有系統的源代碼,在不修改的情況下來擴展系統的功能,滿足開閉原則的要求。

在實現依賴倒轉原則時,我們需要針對抽象層編程,而將具體類的對象通過依賴注入(DependencyInjection, DI)的方式注入到其他對象中,依賴注入是指當一個對象要與其他對象發生依賴關係時,通過抽象來注入所依賴的對象。常用的注入方式有三種,分別是:構造注入,設值注入(Setter注入)和接口注入。構造注入是指通過構造函數來傳入具體類的對象,設值注入是指通過Setter方法來傳入具體類的對象,而接口注入是指通過在接口中聲明的業務方法來傳入具體類的對象。這些方法在定義時使用的是抽象類型,在運行時再傳入具體類型的對象,由子類對象來覆蓋父類對象。

在實際編程中,我們一般需要做到如下3點:

  • 低層模塊儘量都要有抽象類或接口,或者兩者都有。
  • 變量的聲明類型儘量是抽象類或接口。
  • 使用繼承時遵循里氏替換原則。

依賴倒置原則的核心就是要我們面向接口編程,理解了面向接口編程,也就理解了依賴倒置。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章