欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Java設(shè)計(jì)模式編程中的依賴倒置原則

 更新時(shí)間:2016年02月03日 11:11:05   作者:卡奴達(dá)摩  
這篇文章主要介紹了詳解Java設(shè)計(jì)模式中的依賴倒置原則,針對(duì)面對(duì)對(duì)象編程中的抽象的運(yùn)用,需要的朋友可以參考下

定義:
高層模塊不應(yīng)該依賴低層模塊,二者都應(yīng)該依賴其抽象;抽象不應(yīng)該依賴細(xì)節(jié);細(xì)節(jié)應(yīng)該依賴抽象。
問題由來:類A直接依賴類B,假如要將類A改為依賴類C,則必須通過修改類A的代碼來達(dá)成。這種場(chǎng)景下,類A一般是高層模塊,負(fù)責(zé)復(fù)雜的業(yè)務(wù)邏輯;類B和類C是低層模塊,負(fù)責(zé)基本的原子操作;假如修改類A,會(huì)給程序帶來不必要的風(fēng)險(xiǎn)。
解決方案:將類A修改為依賴接口I,類B和類C各自實(shí)現(xiàn)接口I,類A通過接口I間接與類B或者類C發(fā)生聯(lián)系,則會(huì)大大降低修改類A的幾率。
         依賴倒置原則基于這樣一個(gè)事實(shí):相對(duì)于細(xì)節(jié)的多變性,抽象的東西要穩(wěn)定的多。以抽象為基礎(chǔ)搭建起來的架構(gòu)比以細(xì)節(jié)為基礎(chǔ)搭建起來的架構(gòu)要穩(wěn)定的多。在java中,抽象指的是接口或者抽象類,細(xì)節(jié)就是具體的實(shí)現(xiàn)類,使用接口或者抽象類的目的是制定好規(guī)范和契約,而不去涉及任何具體的操作,把展現(xiàn)細(xì)節(jié)的任務(wù)交給他們的實(shí)現(xiàn)類去完成。
         依賴倒置原則的核心思想是面向接口編程,我們依舊用一個(gè)例子來說明面向接口編程比相對(duì)于面向?qū)崿F(xiàn)編程好在什么地方。場(chǎng)景是這樣的,母親給孩子講故事,只要給她一本書,她就可以照著書給孩子講故事了。

例子:
違法依賴倒置的情況

public class Student { 
  public void read(Book book){ 
    System.out.println("學(xué)生開始閱讀:"+book.getName()); 
  } 
} 
 
public class Book { 
  public String getName() { 
    return "書籍"; 
  } 
} 


當(dāng)學(xué)生需要閱讀網(wǎng)頁時(shí),就需要修改Student類,這是很不友好的設(shè)計(jì)。下面我們看遵守依賴倒置原則的例子。

public interface Person { 
  public void read(Reader reader); 
} 
 
public interface Reader { 
  public String getName(); 
} 
 
public class Student implements Person{ 
  @Override 
  public void read(Reader reader) { 
    System.out.println("學(xué)生開始閱讀:"+reader.getName()); 
  } 
} 
 
public class Book implements Reader { 
  public String getName() { 
    return "書籍"; 
  } 
} 
 
public class Website implements Reader { 
  public String getName() { 
    return "網(wǎng)頁"; 
  } 
} 
 
public class Test { 
  public static void main(String[] args) { 
    Person student = new Student(); 
    student.read(new Book()); 
    student.read(new Website()); 
  } 
} 


在read方法中我們使用了接口作為參數(shù)。

總結(jié):
1. 每個(gè)類最好有接口或者抽象類,或者同時(shí)接口和抽象類都有。
2. 變量聲明最好是接口或者抽象類。
3. 繼承時(shí)遵守里氏替換原則。

相關(guān)文章

  • 關(guān)于easyExcel中讀取Excel表頭的實(shí)例說明

    關(guān)于easyExcel中讀取Excel表頭的實(shí)例說明

    EasyExcel是阿里巴巴開源的一個(gè)excel處理框架,以使用簡(jiǎn)單、節(jié)省內(nèi)存著稱,下面這篇文章主要給大家介紹了關(guān)于easyExcel中讀取Excel表頭的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • java實(shí)現(xiàn)支付寶退款功能

    java實(shí)現(xiàn)支付寶退款功能

    這篇文章主要為大家詳細(xì) 介紹了java實(shí)現(xiàn)支付寶退款功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • Java設(shè)計(jì)模式之監(jiān)聽器模式實(shí)例詳解

    Java設(shè)計(jì)模式之監(jiān)聽器模式實(shí)例詳解

    這篇文章主要介紹了Java設(shè)計(jì)模式之監(jiān)聽器模式,結(jié)合實(shí)例形式較為詳細(xì)的分析了java設(shè)計(jì)模式中監(jiān)聽器模式的概念、原理及相關(guān)實(shí)現(xiàn)與使用技巧,需要的朋友可以參考下
    2018-02-02
  • Spring Boot Filter 過濾器的使用方式

    Spring Boot Filter 過濾器的使用方式

    這篇文章主要介紹了Spring Boot Filter 過濾器的使用方式,文章通過圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • Log4j按級(jí)別輸出日志到不同文件的實(shí)現(xiàn)方法

    Log4j按級(jí)別輸出日志到不同文件的實(shí)現(xiàn)方法

    下面小編就為大家?guī)硪黄狶og4j按級(jí)別輸出日志到不同文件的實(shí)現(xiàn)方法。
    2016-11-11
  • 詳解Spring Cloud Netflix Zuul中的速率限制

    詳解Spring Cloud Netflix Zuul中的速率限制

    這篇文章主要介紹了詳解Spring Cloud Netflix Zuul中的速率限制,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-11-11
  • 淺談java 中equals和==的區(qū)別

    淺談java 中equals和==的區(qū)別

    這篇文章主要介紹了java 中equals和==的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • spring中IOC控制反轉(zhuǎn)依賴注入和new對(duì)象的區(qū)別說明

    spring中IOC控制反轉(zhuǎn)依賴注入和new對(duì)象的區(qū)別說明

    這篇文章主要介紹了spring中IOC控制反轉(zhuǎn)依賴注入和new對(duì)象的區(qū)別說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 詳解Java基礎(chǔ)知識(shí)——JDBC

    詳解Java基礎(chǔ)知識(shí)——JDBC

    這篇文章主要介紹了Java基礎(chǔ)知識(shí)——JDBC,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Java數(shù)據(jù)結(jié)構(gòu)之圖的原理與實(shí)現(xiàn)

    Java數(shù)據(jù)結(jié)構(gòu)之圖的原理與實(shí)現(xiàn)

    圖(Graph)是由頂點(diǎn)的有窮非空集合和頂點(diǎn)之間邊的集合組成,通常表示為:G(V,E),其中,G表示一個(gè)圖,V是圖G中頂點(diǎn)的集合,E是圖G中邊的集合。本文將詳細(xì)介紹圖的原理及其代碼實(shí)現(xiàn),需要的可以參考一下
    2022-01-01

最新評(píng)論