六大設計原則----依賴倒置原則

      網友投稿 1031 2022-05-28

      什么是依賴導致原則?依賴倒置原則的定義是:

      高層模塊不應該依賴低層模塊,兩者都應該依賴其抽象;抽象不應該依賴細節,細節應該依賴抽象。簡單的說就是要求對抽象進行編程,不要對實現進行編程,這樣就降低了客戶與實現模塊間的耦合。

      這句話是什么意思?單純的看定義的話,其實感覺有點不知所以,讓我們看個案例去理解一下。

      【例】組裝電腦

      現要組裝一臺電腦,需要配件cpu,硬盤,內存條。只有這些配置都有了,計算機才能正常的運行。選擇cpu有很多選擇,如Intel,AMD等,硬盤可以選擇希捷,西數等,內存條可以選擇金士頓,海盜船等。

      代碼如下:

      希捷硬盤類(XiJieHardDisk):

      public class XiJieHardDisk implements HardDisk { public void save(String data) { System.out.println("使用希捷硬盤存儲數據" + data); } public String get() { System.out.println("使用希捷希捷硬盤取數據"); return "數據"; } }

      Intel處理器(IntelCpu):

      六大設計原則----依賴倒置原則

      public class IntelCpu implements Cpu { public void run() { System.out.println("使用Intel處理器"); } }

      金士頓內存條(KingstonMemory):

      public class KingstonMemory implements Memory { public void save() { System.out.println("使用金士頓作為內存條"); } }

      電腦(Computer):

      public class Computer { private XiJieHardDisk hardDisk; private IntelCpu cpu; private KingstonMemory memory; public IntelCpu getCpu() { return cpu; } public void setCpu(IntelCpu cpu) { this.cpu = cpu; } public KingstonMemory getMemory() { return memory; } public void setMemory(KingstonMemory memory) { this.memory = memory; } public XiJieHardDisk getHardDisk() { return hardDisk; } public void setHardDisk(XiJieHardDisk hardDisk) { this.hardDisk = hardDisk; } public void run() { System.out.println("計算機工作"); cpu.run(); memory.save(); String data = hardDisk.get(); System.out.println("從硬盤中獲取的數據為:" + data); } }

      測試類(TestComputer):

      public class TestComputer { public static void main(String[] args) { Computer computer = new Computer(); computer.setHardDisk(new XiJieHardDisk()); computer.setCpu(new IntelCpu()); computer.setMemory(new KingstonMemory()); computer.run(); } }

      上面代碼可以看到已經組裝了一臺電腦,但是似乎組裝的電腦的cpu只能是Intel的,內存條只能是金士頓的,硬盤只能是希捷的,這對用戶肯定是不友好的,用戶有了機箱肯定是想按照自己的喜好,選擇自己喜歡的配件。

      根據依賴倒轉原則進行改進:

      代碼我們只需要修改Computer類,讓Computer類依賴抽象(各個配件的接口),而不是依賴于各個組件具體的實現類。

      類圖如下:

      電腦(Computer):

      public class Computer { private HardDisk hardDisk; private Cpu cpu; private Memory memory; public HardDisk getHardDisk() { return hardDisk; } public void setHardDisk(HardDisk hardDisk) { this.hardDisk = hardDisk; } public Cpu getCpu() { return cpu; } public void setCpu(Cpu cpu) { this.cpu = cpu; } public Memory getMemory() { return memory; } public void setMemory(Memory memory) { this.memory = memory; } public void run() { System.out.println("計算機工作"); } }

      面向對象的開發很好的解決了這個問題,一般情況下抽象的變化概率很小,讓用戶程序依賴于抽象,實現的細節也依賴于抽象。即使實現細節不斷變動,只要抽象不變,客戶程序就不需要變化。這大大降低了客戶程序與實現細節的耦合度。

      看了這個例子,明白依賴倒置原則是什么了嗎?其實就是面向接口編程,類與類之間,不直接進行強依賴,而通過接口的方式進行弱依賴.

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:MySQL之深入解析一條SQL的執行流程
      下一篇:2021-09-06 網安實驗-編碼解碼-凱撒密碼,QWERTY鍵盤編碼
      相關文章
      亚洲日韩国产精品第一页一区 | 亚洲欧洲日产国码av系列天堂| 亚洲影院天堂中文av色| 亚洲国产美国国产综合一区二区| 亚洲夜夜欢A∨一区二区三区| 亚洲国产精品综合久久一线| 国产精品亚洲一区二区三区 | 亚洲黄色高清视频| 亚洲A∨无码一区二区三区| 亚洲国产精品嫩草影院在线观看 | 亚洲一卡二卡三卡| 亚洲欧洲日产国产最新| 亚洲天堂福利视频| 亚洲免费福利视频| 国产日本亚洲一区二区三区| 亚洲国产成AV人天堂无码| 亚洲ts人妖网站| 亚洲av乱码一区二区三区香蕉| 亚洲一区精彩视频| 亚洲妇女无套内射精| 亚洲AV无码一区二区三区电影| 亚洲6080yy久久无码产自国产| 综合偷自拍亚洲乱中文字幕| 亚洲A丁香五香天堂网| 老司机亚洲精品影视www| 亚洲乱码中文字幕综合| 亚洲产国偷V产偷V自拍色戒| 亚洲AV日韩精品久久久久| 久久水蜜桃亚洲av无码精品麻豆| 亚洲日韩乱码中文无码蜜桃 | 久久亚洲AV无码西西人体| 亚洲国产日韩在线视频| 久久久综合亚洲色一区二区三区| 久久久久亚洲av无码专区| 亚洲国产精品久久丫| 亚洲性色AV日韩在线观看| 国产精品成人亚洲| 国产亚洲一区二区在线观看| 亚洲va在线va天堂va不卡下载 | 亚洲国产成人久久综合野外| 亚洲自偷自偷偷色无码中文|