最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java 設(shè)計模式之依賴倒置實例詳解

 更新時間:2019年11月18日 10:29:32   作者:傾聽歲月  
這篇文章主要介紹了java 設(shè)計模式之依賴倒置,結(jié)合實例形式詳細(xì)分析了依賴倒置的相關(guān)概念、原理、使用技巧及相關(guān)操作注意事項,需要的朋友可以參考下

本文實例講述了java 設(shè)計模式之依賴倒置。分享給大家供大家參考,具體如下:

依賴倒置的概念我也是在一篇博文上理解的,我覺得很精辟,所以收錄在我的博客中。

類A 依賴 類B,之后根據(jù)需求 類A 變換為依賴 類C,這時候我們認(rèn)為類A 是高層模塊, 類B 和 類C 是低層模塊。

什么是高層模塊?什么是底層模塊?
高層模塊你可以理解為控制層,負(fù)責(zé)復(fù)雜的業(yè)務(wù)邏輯。
低層模塊你可以理解為數(shù)據(jù)層,負(fù)責(zé)基本的原子操作。

什么意思? 我舉個例子。
比如大胃王比賽。
在這場比賽中的規(guī)則是比賽誰吃饅頭吃的最多。有參賽選手Q和W

/**
 * 饅頭 實體類
 */
class SteamedBuns
{
  private String name = "饅頭"; 
  public String getName()
  {
    return this.name;
  }
}
class Player
{
  //得了多少分
  private int intgral;
  private Sting name;
  public Player(String name)
  {
    setName(name);
  }    
  public void setName(String name)
  {
    this.name = name;
  }
  public String getName()
  {
    return name;
  }
  public void setIntgral(int intgral)
  {
    this.intgral= intgral;
  }
  public int getIntgral()
  {
    return this.intgral;
  }
  public void eat(SteamedBuns steamedBuns)
  {
    System.out.println("我開吃了");
    setIntgral(getIntgral() + 1);
  }
}
public class Main
{
  pubic static void main(String[] agrs)
  {
    Player q = new Player("Q");//選手Q
    Player w = new Player("W");//選手W
    q.eat(new SteamedBuns());//選手Q吃饅頭
    w.eat(new SteamedBuns());//選手W吃饅頭
  }
}

那么,之后問題來了。Q和W 比分一樣,胃口太大把饅頭吃光了,現(xiàn)在好追加比賽吃包子。 但Q和W 的實體只支持吃饅頭,這個不符合情理哇,不可能一個人能吃饅頭不能吃包子哇。

public void eat(SteamedBuns steamedBuns)//選手只支持吃饅頭

有的同學(xué)可能會想到用重載這個方法。

public void eat(SteamedBuns steamedBuns){}   //選手支持吃饅頭
public void eat(SteamedStuffedBun steamedStuffedBun){} //選手支持吃包子

思路是正確的,但是在實際開發(fā)中,這樣做,可能會給程序帶來不必要的風(fēng)險。
這時候依賴倒置的優(yōu)越性就體現(xiàn)出來了。
還是思考。既然饅頭吃光了,現(xiàn)在要比賽吃包子,那么我們想一下如果包子也吃光了還沒有分出勝負(fù),要繼續(xù)追加比賽怎么辦?再用重載嗎? 人都是可以吃食物的,我們要讓包子和饅頭都實現(xiàn)食物接口。而參賽選手的依賴應(yīng)該從包子和饅頭 抽象出來 依賴食物接口。 這樣只要一個類實現(xiàn)了食物接口,那么都能被吃。

/**
 * 食物接口
 */
interface Food
{
  public String getName();
}
/**
 * 饅頭 實體類
 */
class SteamedBuns implements Food
{
  private String name = "饅頭";
  @Override
  public String getName()
  {
    return this.name;
  }
}
/**
 * 包子 實體類
 */
class SteamedStuffedBun implements Food
{
  private String name = "包子";
  @Override
  public String getName()
  {
    return this.name;
  }
}
class Player
{
  private int intgral;
  private Sting name;
  public Player(String name)
  {
    setName(name);
  }  
  public void setName(String name)
  {
    this.name = name;
  }
  public String getName()
  {
    return name;
  }
  public void setIntgral(int intgral)
  {
    this.intgral= intgral;
  }
  public int getIntgral()
  {
    return this.intgral;
  }
  /**取消對具體食物種類的依賴
  public void eat(SteamedBuns steamedBuns)
  {
    System.out.println("我開吃了");
    setIntgral(getIntgral() + 1);
  }
  */
  public void eat(Food food)
  {
    System.out.println("我開吃了");
    setIntgral(getIntgral() + 1);
  }
}
public class Main
{
  pubic static void main(String[] agrs)
  {
    Player q = new Player("Q");//選手Q
    Player w = new Player("W");//選手W
    q.eat(new SteamedBuns());//選手Q吃饅頭
    w.eat(new SteamedBuns());//選手W吃饅頭
    q.eat(new SteamedStuffedBun());//選手Q吃包子
    w.eat(new SteamedStuffedBun());//選手W吃包子
  }
}

這樣的設(shè)計有助于降低類之間的耦合程度,抽象穩(wěn)定的多,細(xì)節(jié)交給實現(xiàn)類。

更多java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java面向?qū)ο蟪绦蛟O(shè)計入門與進(jìn)階教程》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

希望本文所述對大家java程序設(shè)計有所幫助。

相關(guān)文章

  • springboot全局字符編碼設(shè)置方式(解決亂碼問題)

    springboot全局字符編碼設(shè)置方式(解決亂碼問題)

    這篇文章主要介紹了springboot全局字符編碼設(shè)置方式(解決亂碼問題),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 關(guān)于Java如何正確地實現(xiàn)方法重載詳解

    關(guān)于Java如何正確地實現(xiàn)方法重載詳解

    在一個類中,可以定義多個構(gòu)造方法,這叫做方法的重載!但是關(guān)于方法重載,具有有哪些要求和細(xì)節(jié)?在今天的這篇文章中,小編給大家詳細(xì)說說方法重載相關(guān)的內(nèi)容,需要的朋友可以參考下
    2023-05-05
  • java異常處理的簡單練習(xí)

    java異常處理的簡單練習(xí)

    下面小編就為大家?guī)硪黄猨ava異常處理的簡單練習(xí)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • 如何解決 Java 中的 IndexOutOfBoundsException 異常(最新推薦)

    如何解決 Java 中的 IndexOutOfBoundsException 異

    當(dāng)我們在 Java 中使用 List 的時候,有時候會出現(xiàn)向 List 中不存在的位置設(shè)置新元素的情況,從而導(dǎo)致 IndexOutOfBoundsException 異常,本文將會介紹這個問題的產(chǎn)生原因以及解決方案
    2023-10-10
  • java 整型數(shù)與Integer的緩存深入理解

    java 整型數(shù)與Integer的緩存深入理解

    這篇文章主要介紹了java 整型數(shù)與Integer的緩存深入理解的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • Java SimpleDateFormat線程安全問題原理詳解

    Java SimpleDateFormat線程安全問題原理詳解

    這篇文章主要介紹了Java SimpleDateFormat線程安全問題原理詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05
  • java抓取網(wǎng)頁數(shù)據(jù)獲取網(wǎng)頁中所有的鏈接實例分享

    java抓取網(wǎng)頁數(shù)據(jù)獲取網(wǎng)頁中所有的鏈接實例分享

    java抓取網(wǎng)頁數(shù)據(jù)獲取網(wǎng)頁中所有的鏈接實例分享,使用方法,只要實例化HtmlParser時傳入網(wǎng)頁地址就可以了
    2013-12-12
  • 獲取JsonObject某一未知key的值操作

    獲取JsonObject某一未知key的值操作

    這篇文章主要介紹了獲取JsonObject某一未知key的值操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • Spring中HandlerAdapter接口源碼解析

    Spring中HandlerAdapter接口源碼解析

    這篇文章主要介紹了Spring中HandlerAdapter接口源碼解析,HandlerAdapter是一個適配器接口類,適配器模式是指兩個不兼容接口之間的橋梁,要想讓一個接口使用另外一個接口的實現(xiàn)中間可以加一層適配器類,需要的朋友可以參考下
    2023-11-11
  • SpringBoot實現(xiàn)OneDrive文件上傳的詳細(xì)步驟

    SpringBoot實現(xiàn)OneDrive文件上傳的詳細(xì)步驟

    這篇文章主要介紹了SpringBoot實現(xiàn)OneDrive文件上傳的詳細(xì)步驟,文中通過代碼示例和圖文講解的非常詳細(xì),對大家實現(xiàn)OneDrive文件上傳有一定的幫助,需要的朋友可以參考下
    2024-02-02

最新評論

芷江| 怀柔区| 迁安市| 确山县| 阜新| 光泽县| 安丘市| 浦江县| 柳河县| 台中县| 门头沟区| 敦化市| 黄梅县| 留坝县| 喀喇| 遂溪县| 南木林县| 花莲市| 西贡区| 余姚市| 平乡县| 吉木萨尔县| 祁东县| 昭觉县| 东城区| 鄢陵县| 永善县| 长乐市| 泊头市| 太康县| 元谋县| 静乐县| 沐川县| 元阳县| 汉沽区| 江西省| 兴和县| 梅河口市| 齐河县| 阜新| 延庆县|