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

歡迎訪問 生活随笔!

生活随笔

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

asp.net

ASP.NET 设计模式中依赖倒置原则

發布時間:2025/5/22 asp.net 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET 设计模式中依赖倒置原则 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
依賴倒置原則 A.高層次的模塊不應該依賴于低層次的模塊,他們都應該依賴于抽象。 B.抽象不應該依賴于具體,具體應該依賴于抽象。 依賴倒置原則 A.高層次的模塊不應該依賴于低層次的模塊,他們都應該依賴于抽象。 B.抽象不應該依賴于具體,具體應該依賴于抽象。

目錄

1概述

2意圖

3代碼實現

4結構圖

1概述編輯

所謂依賴倒置原則(Dependence Inversion Principle)就是要依賴于抽象,不要依賴于具體。簡單的說就是要求對抽象進行編程,不要對實現進行編程,這樣就降低了客戶與實現模塊間的耦合。

2意圖編輯

面向過程的開發,上層調用下層,上層依賴于下層,當下層劇烈變動時上層也要跟著變動,這就會導致模塊的復用性降低而且大大提高了開發的成本。 面向對象的開發很好的解決了這個問題,一般情況下抽象的變化概率很小,讓用戶程序依賴于抽象,實現的細節也依賴于抽象。即使實現細節不斷變動,只要抽象不變,客戶程序就不需要變化。這大大降低了客戶程序與實現細節的耦合度。 面向過程思想的結構圖: 圖一 背景1:公司是福特和本田公司的金牌合作伙伴,現要求開發一套自動駕駛系統,只要汽車上安裝該系統就可以實現無人駕駛,該系統可以在福特和本田車上使用,只要這兩個品牌的汽車使用該系統就能實現自動駕駛。于是有人做出了分析如圖一。 對于圖一分析:我們定義了一個AutoSystem類,一個FordCar類,一個HondaCar類。FordCar類和HondaCar類中各有三個方法:Run(啟動Car)、Turn(轉彎Car)、Stop(停止Car),當然了一個汽車肯定不止這些功能,這里只要能說明問題即可。AutoSystem類是一個自動駕駛系統,自動操縱這兩輛車。

3代碼實現編輯

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 publicclassHondaCar{ publicvoidRun() { Console.WriteLine("本田開始啟動了"); } publicvoidTurn() { Console.WriteLine("本田開始轉彎了"); } publicvoidStop() { Console.WriteLine("本田開始停車了"); } } publicclassFordCar { publicvoidRun() { Console.WriteLine("福特開始啟動了"); } publicvoidTurn() { Console.WriteLine("福特開始轉彎了"); } publicvoidStop() { Console.WriteLine("福特開始停車了"); } } publicclassAutoSystem { publicenumCarType{Ford,Honda}; privateHondaCarhcar=newHondaCar(); privateFordCarfcar=newFordCar(); privateCarTypetype; publicAutoSystem(CarTypetype) { this.type=type; } privatevoidRunCar() { if(type==CarType.Ford) { fcar.Run(); } else { hcar.Run(); } } privatevoidTurnCar() { if(type==CarType.Ford) { fcar.Turn(); } else { hcar.Turn(); } } privatevoidStopCar() { if(type==CarType.Ford) { fcar.Stop(); } else { hcar.Stop(); } } }
代碼分析:上面的程序確實能夠實現針對Ford和Honda車的無人駕駛,但是軟件是在不斷變化的,軟件的需求也在不斷的變化。 背景2:公司的業務做大了,同時成為了通用、三菱、大眾的金牌合作伙伴,于是公司要求該自動駕駛系統也能夠安裝在這3種公司生產的汽車上。于是我們不得不變動AutoSystem:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 publicclassAutoSystem { publicenumCarType{Ford,Honda,Bmw}; HondaCarhcar=newHondaCar(); FordCarfcar=newFordCar(); BmwCarbcar=newBmwCar(); privateCarTypetype; publicAutoSystem(CarTypetype) { this.type=type; } privatevoidRunCar() { if(type==CarType.Ford) { fcar.Run(); } elseif(type==CarType.Honda) { hcar.Run(); } elseif(type==CarType.Bmw) { bcar.Run(); } } privatevoidTurnCar() { if(type==CarType.Ford) { fcar.Turn(); } elseif(type==CarType.Honda) { hcar.Turn(); } elseif(type==CarType.Bmw) { bcar.Turn(); } } privatevoidStopCar() { if(type==CarType.Ford) { fcar.Stop(); } elseif(type==CarType.Honda) { hcar.Stop(); } elseif(type==CarType.Bmw) { bcar.Stop(); } } }
分析:這會給系統增加新的相互依賴。隨著時間的推移,越來越多的車種必須加入到AutoSystem中,這個“AutoSystem”模塊將會被if/else語句弄得很亂,而且依賴于很多的低層模塊,只要低層模塊發生變動,AutoSystem就必須跟著變動, 它最終將變得僵化、脆弱。 導致上面所述問題的一個原因是,含有高層策略的模塊,如AutoSystem模塊,依賴于它所控制的低層的具體細節的模塊(如HondaCar()和FordCar())。如果我們能夠找到一種方法使AutoSystem模塊獨立于它所控制的具體細節,那么我們就可以自由地復用它了。我們就可以用這個模塊來生成其它的程序,使得系統能夠用在需要的汽車上。OOD給我們提供了一種機制來實現這種“依賴倒置”。

4結構圖編輯

圖二 看圖 2中這個簡單的類圖。這兒有一個“AutoSystem”類,它包含一個“ICar”接口。這個“AutoSystem”類根本不依賴于“FordCar”和“HondaCar”。所以,依賴關系被“倒置”了:“AutoSystem”模塊依賴于抽象,那些具體的汽車操作也依賴于相同的抽象。 于是可以添加ICar
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 publicinterfaceICar { voidRun(); voidTurn(); voidStop(); } publicclassBmwCar:ICar { publicvoidRun() { Console.WriteLine("寶馬開始啟動了"); } publicvoidTurn() { Console.WriteLine("寶馬開始轉彎了"); } publicvoidStop() { Console.WriteLine("寶馬開始停車了"); } } publicclassFordCar:ICar { publicvoidRun() { Console.WriteLine("福特開始啟動了"); } publicvoidTurn() { Console.WriteLine("福特開始轉彎了"); } publicvoidStop() { Console.WriteLine("福特開始停車了"); } } publicclassHondaCar:ICar { publicvoidRun() { Console.WriteLine("本田開始啟動了"); } publicvoidTurn() { Console.WriteLine("本田開始轉彎了"); } publicvoidStop() { Console.WriteLine("本田開始停車了"); } } publicclassAutoSystem { privateICaricar; publicAutoSystem(ICaricar) { this.icar=icar; } privatevoidRunCar() { icar.Run(); } privatevoidTurnCar() { icar.Turn(); } privatevoidStopCar() { icar.Stop(); } }
現在AutoSystem系統依賴于ICar 這個抽象,而與具體的實現細節HondaCar、FordCar、BmwCar無關,所以實現細節的變化不會影響AutoSystem。對于實現細節只要實現ICar 即可,即實現細節依賴于ICar 抽象。 綜上: 一個應用中的重要策略決定及業務模型正是在這些高層的模塊中。也正是這些模型包含著應用的特性。但是,當這些模塊依賴于低層模塊時,低層模塊的修改將會直接影響到它們,迫使它們也去改變。這種境況是荒謬的。應該是處于高 層的模塊去迫使那些低層的模塊發生改變。應該是處于高層的模塊優先于低層的模塊。無論如何高層的模塊也不應依賴于低層的模塊。而且,我們想能夠復用的是高層的模塊。通過子程序庫的形式,我們已經可以很好地復用低層的模塊了。當高層的模塊依賴于低層的模塊時,這些高層模塊就很難在不同的環境中復用。但是,當那些高層模塊獨立于低層模塊時,它們就能很簡單地被復用了。這正是位于框架設計的最核心之處的原則。 總結:依賴倒置原則 A.高層次的模塊不應該依賴于低層次的模塊,他們都應該依賴于抽象。 B.抽象不應該依賴于具體,具體應該依賴于抽象。

轉載于:https://www.cnblogs.com/love828/p/3871999.html

總結

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

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

主站蜘蛛池模板: 97国产一区| 天天射一射 | 国产精品不卡一区二区三区 | 色女综合 | 久久久蜜桃一区二区 | 穿扒开跪着折磨屁股视频 | 成人不卡| 亚洲国产精品综合久久久 | 91丝袜一区二区三区 | 天天综合在线观看 | 国产伦精品一区二区三区免费 | 日韩欧美精品免费 | 黄色天堂| 成人免费高清 | 午夜在线视频观看 | 国产精品精品 | 日韩乱码一区二区三区 | 男操女视频免费 | 成人aaa视频 | 午夜影院在线播放 | 欧美一区三区 | 国产精品18 | 亚洲aⅴ网站 | 国产精品久久久久久 | 人人搞人人 | 欧美精品一区二区三区四区五区 | 美女视频黄a视频全免费观看 | 在线中文字幕日韩 | 综合视频一区 | 国产精品久久久久999 | 老司机午夜福利视频 | 伊人av网站| 日本www视频| av5566| 午夜噜噜 | 粉嫩av一区二区白浆 | 午夜xxxxx| 日本少妇在线 | 精品国产综合区久久久久久 | 日韩在线视频中文字幕 | av男人的天堂av | 波多野一区二区三区 | 国产色99 | 欧美成人午夜视频 | 亚洲av成人精品一区二区三区在线播放 | 韩日视频在线观看 | 中文字幕在线观看视频www | 日本免费在线观看 | 三级伦理片 | 老太太av| 超碰人人在线 | 日韩免费视频网站 | 黄色应用在线观看 | 欧美色图3p| 一级aa毛片 | 伊人亚洲精品 | 午夜aa| 男人av网| 91精品国产综合久久久蜜臀图片 | 精品香蕉视频 | 超碰成人免费在线 | 欧州一区 | 成人依人 | 久久久久人妻一区精品色欧美 | 国产精品视频久久久久久 | 最新av网址在线观看 | 亚洲成av人影院 | 女人色极品影院 | 国产精品无码一区二区无人区多人 | 国产一区二区视频在线观看免费 | 国产欧美日韩精品一区二区三区 | 国产美女91呻吟求 | 色欲国产精品一区二区 | 中文在线字幕免费观看电 | 国产成人精品三级麻豆 | 黄色仓库av | 色偷偷av男人的天堂 | 日日爱网站 | 密桃成熟时在线观看 | 日韩欧美高清dvd碟片 | 特级黄色一级片 | 日韩精品一区二区三区无码专区 | 亚洲久久成人 | 在线观看va| 成人wwxx免费观看 | 亚洲一区二区天堂 | 日本人性爱视频 | 日韩在线精品强乱中文字幕 | 中文字幕久久av | 无码国产精品96久久久久 | 免费看片视频 | 手机av观看| 黄色网页免费在线观看 | 九色tv | 日韩美女做爰高潮免费 | 日本一区二区免费在线观看 | 中文字幕精品一区二区三区视频 | 性色生活片 | 麻豆精品视频在线观看 |