日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

4.依赖倒置原则

發(fā)布時間:2023/12/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 4.依赖倒置原则 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 一、定義
  • 二、常見的系統(tǒng)模塊設計
  • 三、依賴導致原則分析
  • 四、依賴倒置原則修改系統(tǒng)結構
  • 五、依賴注入
    • 1.依賴注入的方式
      • (1)構造注入
      • (2)設值注入
      • (3)接口注入
  • 六、依賴倒置原則實例
    • 1、存在問題
    • 2、依賴倒置原則重構

一、定義

??(1)高層模塊不應該依賴低層模塊,它們都應該依賴抽象;抽象不應該依賴于細節(jié),細節(jié)應該依賴于抽象。無論是高層模塊還是低層模塊,都應該依賴于抽象。

??另外一種表述:要針對接口編程,不要針對實現(xiàn)編程。實現(xiàn)指的是具體的類,是不穩(wěn)定的。

??(2)結構良好的面向對象架構都具有清晰的層次定義,每個層次通過一個定義良好的、受控的接口向外提供一組內聚的服務。

二、常見的系統(tǒng)模塊設計

??一般認為系統(tǒng)的結構是:高層的調用低層的,低層的再調用更低層的,如下圖:

??Policy Layer:決策層
??Mechanism Layer:機制層
??Utility Layer:工具層

??這樣看起來似乎是正確的,但是高層對低層的改動是敏感的。低層發(fā)生改變了,比如低層的方法名,參數改變。會導致中層發(fā)生改變,接著導致高層發(fā)生改變。

三、依賴導致原則分析

??(1)簡單來說,依賴倒置原則就是指:代碼要依賴于抽象的類,而不要依賴于具體的類;要針對接口或抽象類編程,而不是針對具體類編程。

??(2)更好的描述是:不要依賴那些容易變化的具體類。如果要繼承一個類,從一個抽象類繼承;如果要持有一個類的引用,從一個抽象類引用;如果要調用一個函數,從一個抽象的函數調用。

??什么是依賴,只要 A類 和 B類 發(fā)生了關系,那么它們就存在了依賴關系。就比如說 A類調用了B類中的方法,那么就可以說A依賴于B。這里的依賴是泛指的。

??(3)實現(xiàn)開閉原則的關鍵是抽象化,并且從抽象化導出具體化實現(xiàn),如果說開閉原則是面向對象設計的目標,那么依賴倒置原則就是主要手段。

??(4)依賴倒置原則的常用實現(xiàn)方式之一是在代碼中使用抽象類,而將具體類放在配置文件中。

如下圖:

??(5)依賴倒置原則主要解決的是類之間的耦合關系,對類進行解耦。

??類之間的耦合關系大致為:

??1)零耦合:兩個類是獨立的,沒有關系

??2)具體耦合關系:兩個類發(fā)生了關系并且都是具體的類

??3)抽象耦合關系

??依賴倒置原則要求客戶端依賴于抽象耦合,以抽象方式耦合是依賴倒置原則的關鍵。

??比如,服務端C 經常要調用服務端S 提供的服務,如果S是抽象的是允許的,如果是具體的類是不允許的(這種關系是不穩(wěn)定的)。

四、依賴倒置原則修改系統(tǒng)結構

??(1)之前的系統(tǒng)結構是高層的模塊通過調用低層的模塊,模塊之間的相互調用來來完成系統(tǒng)的功能設計。但是這樣的設計是存在問題的,低層發(fā)生改變,高層也得發(fā)生改變。

??(2)用依賴倒置原則進行改進:之前的模塊(類)之間的關系是具體的耦合關系,要改進的話在兩個模塊之間增加一個抽象的層,通常是增加抽象的接口。

??這樣高層依賴的是抽象的接口,低層去實現(xiàn)接口

五、依賴注入

??依賴注入是為了更好地實現(xiàn)依賴倒置的配套技術。依賴注入是什么?

??如下圖,A依賴于抽象的C,B依賴于抽象C;而A需要的是具體的B,也就是說要把具體的B傳給A,怎么把具體的B傳給A呢?這就是涉及到依賴注入。

或者說,A依賴于抽象的接口C,在具體的運行中,要給A具體的類,具體的類如何傳給A,用什么方式。

1.依賴注入的方式

(1)構造注入

??通過構造函數注入實例變量。

(2)設值注入

??通過 Setter 方法注入實例變量。這個方法最常用

(3)接口注入

??通過接口方法注入實例變量。

六、依賴倒置原則實例

??某系統(tǒng)提供一個數據轉換模塊,可以將來自不同數據源的數據轉換成多種格

式,如可以轉換來自數據庫的數據(DatabaseSource)、也可以轉換來自文本文件的數據(TextSource),轉換后的格式可以是XML文件(XMLTransformer)、也可以是 XLS文件(XLSTransformer) 等。

1、存在問題

??現(xiàn)在 MainClass 依賴的四個模塊都是具體的

??由于需求的變化,該系統(tǒng)可能需要增加新的數據源或者新的文件格式,每增加一個新的類型的數據源或者新的類型的文件格式,客戶類MainClass都需要修改源代碼,以便使用新的類,但違背了開閉原則。

2、依賴倒置原則重構

??現(xiàn)使用依賴倒置原則對其進行重構,存在的問題就是 MainClass 依賴的四個模塊都是具體的,具體的東西是不穩(wěn)定的。解決的思路就是將具體的模塊抽象化,讓 MainClass 依賴的是抽象的東西。

總結

以上是生活随笔為你收集整理的4.依赖倒置原则的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。