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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

java设计模式之设计原则②依赖倒置原则

發布時間:2023/12/31 asp.net 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java设计模式之设计原则②依赖倒置原则 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

定義:
⑴高層模塊不應該依賴低層模塊,二者都應該依賴其抽象
⑵抽象不應該依賴細節,細節應該依賴抽象
⑶針對接口編程,不要針對實現編程
我們通過抽象包括使用接口或者抽象類可以使各個類或模塊的實現彼此獨立互不影響,從而實現模塊間的松耦合。
使用依賴倒置原則需要注意:
每個類盡量實現或繼承自接口或抽象類,盡量避免從具體的類派生,盡量不要覆蓋其基類的方法
優點:
⑴可以減少類間的耦合性
⑵提高系統穩定性
⑶提高代碼可讀性和可維護性
⑷降低修改程序所造成的風險

以下通過案例進行理解依賴倒置原則
版本v1
創建一個Geely用戶類

寫一個測試類test

輸出

需求:假設這個時候Geely還要學習Python課程
那么對于Geely來說這個實體的方法是在不斷補充的

這樣的做法就是面向實現編程,因為整個Geely就是一個實現類,這個實現類是要經常修改的,擴展性比較差。
test類是應用層的屬于高層模塊,Geely類屬于低層模塊,而在這里test里面的實現依賴于Geely的具體實現,也就是高層模塊依賴于低層模塊,違背了依賴倒置的原則。
所以我們現在引入抽象解決這個問題
首先我們創建一個ICourse接口(課程) 寫個studyCourse()學習方法,具體學什么可能呢,我們交給高層模塊的應用層來選擇
版本v2

然后寫一個JavaCourse類實現ICourse接口,重寫studyCourse學習課程方法

然后再寫一個FECourse類實現ICourse接口,重寫studyCourse學習課程方法

再往下Python也是一樣的
在Geely類中三個具體的實現都可以不要了

寫一個studyImoocCourse方法參數是ICourse接口,因為具體是哪個課程我們需要test應用層決定

這里呢將test類中改為如下

輸出結果是一樣的,但是寫法是不一樣的。
類圖如下:

看圖解釋,如果我們需要學習其他課程 只需要方法哦 FECourse和JavaCourse那一欄即可,Geely這個類是不需要動的,也就是說我們是面向接口編程,我們寫的擴展類都是面向ICourse接口的,而不是面向具體的Geely實現類,而對于高層模塊,我們需要學習什么課程是交給test這個應用層模塊來選擇,這樣就做到了Geely和test他們之間是解耦的,同時Geely和具體的課程實現是解耦的,但是Geely和ICourse接口是有耦合的。
那所謂的高內聚低耦合也就是盡量減少耦合,而因為有依賴關系,例如說ICourse是Geely這個類中一個方法的參數,所以他倆之間是有關系的。
所以接下來的擴展就比較簡單了
比如說學習Pyhon,我們就創建PyhonCourse類實現ICourse接口,重寫studyCourse學習課程方法

而對于高層模塊這個test這個類,我想學習什么,通過Geely.studyImoocCourse方法,里面的參數注入進去就ok了

這樣的話我們想學習新的課程,只需要新建該課程類實現課程接口。這就面向接口編程
而具體想學習什么課程交給應用層的test類這樣的應用層模塊。

以上這個就是通過接口方法的方式來注入具體的實現,那當然呢我們也可以通過構造器的方式來注入Geely里面的實現。
如下:在Geely中寫一個構造器
版本v3

這樣test中改一下就可以了

對于上面這種構造器方式其實使用起來并不方便。
如果Geely還想學別的課程 ,我們還得再new Geely()傳遞課程類。
因為這種注入方式只有在構造的時候再能注入進去,在Spring里面,默認是單例模式
解決方式:在Geely里面開放對ICourse的注入,用sette注入的方式
版本v4

在test中更改入下

這樣就是說Geely在具體執行學習的時候,學習課程的方法不需要關心,就比如在v1版本中,Geely要學習java課程需要調用studyjavaCourse方法,而在這里學習哪個課程都是調用的同一個studyImoocCourse學習方法。
類圖如下:

可以看到三個具體的實現實現ICourse,我們想學習什么課只需要去實現ICourse也就是擴展
而不是去更改實現類。
依賴倒置原則核心思想就是面向接口編程

總結

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

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