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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

设计模式之依赖倒置原则

發(fā)布時(shí)間:2023/12/20 asp.net 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式之依赖倒置原则 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 依賴倒置原則(Dependence Inversion Principle, DIP)
    • 代碼實(shí)現(xiàn)
    • 總結(jié):

依賴倒置原則(Dependence Inversion Principle, DIP)

依賴倒置原則即要依賴于抽象,不依賴于實(shí)現(xiàn)。

  • 高層模塊不應(yīng)該依賴低層模塊,兩者都應(yīng)該依賴其抽象
  • 抽象不應(yīng)該依賴細(xì)節(jié)
  • 細(xì)節(jié)應(yīng)該依賴抽象

代碼實(shí)現(xiàn)

依賴倒置在java中的實(shí)現(xiàn):比如一位媽媽要給孩子講故事

public class Book {public String getContext(){return "從前有座山。。。。。";} } public class Mother {public void tell(Book book){System.out.print("mom開始講故事:");System.out.println(book.getContext());} } public class Child {public static void main(String[] args) {Mother mother = new Mother();mother.tell(new Book());} }

如果我們把書換成日記,報(bào)紙之類的,發(fā)現(xiàn)媽媽居然讀不了日記或報(bào)紙,想讓媽媽讀報(bào)紙必須得改變媽媽的代碼,這顯然是不合理的

public class Diary {public String getContext(){return "日記:今天是xxxxx";} }

新增一個(gè)接口,讀物IReader,書籍、日記、報(bào)紙等可以讀的東西都實(shí)現(xiàn)讀物接口

public interface IReader {/*** 獲取所讀的內(nèi)容* @return*/public String getContext(); }

改動(dòng)后的Mother類

public class Mother {public void tell(IReader reader){//只要拿到讀物的實(shí)現(xiàn)類,不管是新聞還是什么,都可以讀System.out.print("mom開始講");System.out.println(reader.getContext());} }

將之前的Book類和Diary類都實(shí)現(xiàn)讀物接口

public class Book implements IReader{@Overridepublic String getContext() {return "故事書:從前有座山,。。。。。";} } public class Diary implements IReader{@Overridepublic String getContext() {return "日記:今天是xxxx";} }

再想讓媽媽讀報(bào)紙,只需實(shí)現(xiàn)讀物IReader接口即可

public class NewsPaper implements IReader{@Overridepublic String getContext() {return "報(bào)紙:北約停止東擴(kuò),烏蘇關(guān)系降溫";} }

這樣修改之后,無(wú)論Child做什么改動(dòng),都不需要修改Mother類中的內(nèi)容,

測(cè)試:

實(shí)際開發(fā)中,Mother類代表高層類,負(fù)責(zé)完成主要的業(yè)務(wù)邏輯,如果修改錯(cuò)誤的風(fēng)險(xiǎn)極大。開始寫的程序Mother依賴于Book類,耦合性較高,是不可取的,Mother必須在Book類加載后才能閱讀。

修改后的程序,Mother和Book類、Diary類都是沒有聯(lián)系的。這就是依賴倒置原則的使用,可以降低類之間的耦合性,提高系統(tǒng)的穩(wěn)定性,降低修改程序造成的風(fēng)險(xiǎn)。
實(shí)際編程中一般需做到如下3點(diǎn):

  • 低層模塊盡量都要有抽象類或接口,或者兩者都有
  • 變量的聲明類型盡量是抽象類和接口
  • 使用繼承時(shí)遵循里氏代換原則

總結(jié):

IReader相當(dāng)于基類,IReader出現(xiàn)的地方都可以用實(shí)現(xiàn)子類去替換它,這就是里氏代換原則(Liskov Substitution Principle LSP),任何基類可以出現(xiàn)的地方,子類一定可以出現(xiàn)。

里氏代換原則是依賴倒置原則的基礎(chǔ),依賴倒置原則的核心就是要面向接口編程,理解了面向接口編程,也就理解了依賴倒置。

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。