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

java面向?qū)ο笤O(shè)計原則之里氏替換原則示例詳解

 更新時間:2021年10月14日 10:32:11   作者:guoyp2126  
這篇文章主要為大家介紹了java面向?qū)ο笤O(shè)計原則之里氏替換原則示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪

概念

里氏替換原則是任何基類出現(xiàn)的地方,子類一定可以替換它;是建立在基于抽象、多態(tài)、繼承的基礎(chǔ)復(fù)用的基石,該原則能夠保證系統(tǒng)具有良好的拓展性,同時實(shí)現(xiàn)基于多態(tài)的抽象機(jī)制,能夠減少代碼冗余。

實(shí)現(xiàn)

里氏替換原則要求我們在編碼時使用基類或接口去定義對象變量,使用時可以由具體實(shí)現(xiàn)對象進(jìn)行賦值,實(shí)現(xiàn)變化的多樣性,完成代碼對修改的封閉,擴(kuò)展的開放。如:商城商品結(jié)算中,定義結(jié)算接口Istrategy,該接口有三個具體實(shí)現(xiàn)類,分別為PromotionalStrategy (滿減活動,兩百以上百八折)、RebateStrategy (打折活動)、 ReduceStrategy(返現(xiàn)活動);

public interface Istrategy {
    public double realPrice(double consumePrice);
}
public class PromotionalStrategy implements Istrategy {
    public double realPrice(double consumePrice) {
        if (consumePrice > 200) {
            return 200 + (consumePrice - 200) * 0.8;
        } else {
            return consumePrice;
        }
    }
}
public class RebateStrategy implements Istrategy {
    private final double rate;
    public RebateStrategy() {
        this.rate = 0.8;
    }
    public double realPrice(double consumePrice) {
        return consumePrice * this.rate;
    }
}
public class ReduceStrategy implements Istrategy {
    public double realPrice(double consumePrice) {
        if (consumePrice >= 1000) {
            return consumePrice - 200;
        } else {
            return consumePrice;
        }
    }
}

調(diào)用方為Context,在此類中使用接口定義了一個對象。其代碼如下:

public class Context {
    //使用基類定義對象變量
    private Istrategy strategy;
    // 注入當(dāng)前活動使用的具體對象
    public void setStrategy(Istrategy strategy) {
        this.strategy = strategy;
    }
    // 計算并返回費(fèi)用
    public double cul(double consumePrice) {
        // 使用具體商品促銷策略獲得實(shí)際消費(fèi)金額
        double realPrice = this.strategy.realPrice(consumePrice);
        // 格式化保留小數(shù)點(diǎn)后1位,即:精確到角
        BigDecimal bd = new BigDecimal(realPrice);
        bd = bd.setScale(1, BigDecimal.ROUND_DOWN);
        return bd.doubleValue();
    }
}

Context 中代碼使用接口定義對象變量,這個對象變量可以是實(shí)現(xiàn)了lStrategy接口的PromotionalStrategy、RebateStrategy 、 ReduceStrategy任意一個。

拓展

里氏替換原則和依賴倒置原則,構(gòu)成了面向接口編程的基礎(chǔ),正因?yàn)槔锸咸鎿Q原則,才使得程序呈現(xiàn)多樣性。

以上就是java面向?qū)ο笤O(shè)計原則之里氏替換原則示例詳解的詳細(xì)內(nèi)容,更多關(guān)于java面向?qū)ο笤O(shè)計里氏替換原則的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 詳解Spring簡單容器中的Bean基本加載過程

    詳解Spring簡單容器中的Bean基本加載過程

    本篇將對定義在 XMl 文件中的 bean,從靜態(tài)的的定義到變成可以使用的對象的過程,即 bean 的加載和獲取的過程進(jìn)行一個整體的了解
    2017-05-05
  • Java實(shí)現(xiàn)多線程的n種方法

    Java實(shí)現(xiàn)多線程的n種方法

    在現(xiàn)代編程中,多線程是一項(xiàng)關(guān)鍵技術(shù),它使得程序能夠同時執(zhí)行多個任務(wù),提高了系統(tǒng)的效率和性能,在Java中,有多種方法可以實(shí)現(xiàn)多線程,本文將詳細(xì)介紹幾種常見的Java多線程實(shí)現(xiàn)方法,需要的朋友可以參考下
    2024-11-11
  • springmvc 參數(shù)綁定總結(jié)

    springmvc 參數(shù)綁定總結(jié)

    本篇文章主要介紹了詳解springmvc 參數(shù)綁定,詳細(xì)的介紹了springmvc各種參數(shù)綁定的情況,具有一定的參考價值,有興趣的可以了解一下。
    2017-03-03
  • Java中如何正確重寫equals方法

    Java中如何正確重寫equals方法

    Object類中equals方法比較的是兩個對象的引用地址,只有對象的引用地址指向同一個地址時,才認(rèn)為這兩個地址是相等的,否則這兩個對象就不相等
    2021-10-10
  • Spring@Autowired與@Resource的區(qū)別有哪些

    Spring@Autowired與@Resource的區(qū)別有哪些

    這篇文章主要為大家詳細(xì)介紹了@Autowired與@Resource的區(qū)別,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • 用java實(shí)現(xiàn)楊輝三角的示例代碼

    用java實(shí)現(xiàn)楊輝三角的示例代碼

    本篇文章主要介紹了用java實(shí)現(xiàn)楊輝三角的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • Java圖片讀取ImageIO.read()報錯問題及解決

    Java圖片讀取ImageIO.read()報錯問題及解決

    在使用imageio庫讀取圖片時,如果路徑中包含中文,可能會導(dǎo)致讀取失敗,解決方法是將路徑中的中文字符進(jìn)行轉(zhuǎn)義處理,可以使用ImageUtil.java工具類進(jìn)行路徑轉(zhuǎn)義,從而避免錯誤,這是一個常見問題,希望本文的解決方案能幫助到遇到相同問題的開發(fā)者
    2024-10-10
  • 教你利用JAVA實(shí)現(xiàn)可以自行關(guān)閉服務(wù)器的方法

    教你利用JAVA實(shí)現(xiàn)可以自行關(guān)閉服務(wù)器的方法

    今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識,文章圍繞著利用JAVA實(shí)現(xiàn)可以自行關(guān)閉服務(wù)器的方法展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • spring @schedule注解如何動態(tài)配置時間間隔

    spring @schedule注解如何動態(tài)配置時間間隔

    這篇文章主要介紹了spring @schedule注解如何動態(tài)配置時間間隔,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 深入理解spring的AOP機(jī)制原理

    深入理解spring的AOP機(jī)制原理

    本篇文章主要介紹了深入理解spring的AOP機(jī)制原理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09

最新評論

龙里县| 文安县| 法库县| 武威市| 乌恰县| 松阳县| 内黄县| 高雄县| 邢台市| 迁西县| 横山县| 宣威市| 嘉善县| 康定县| 沾化县| 澄城县| 伊川县| 台北县| 晋宁县| 襄垣县| 孟津县| 综艺| 郁南县| 时尚| 新乡市| 琼结县| 海林市| 东莞市| 长垣县| 汶上县| 大足县| 巴塘县| 开阳县| 平安县| 志丹县| 青州市| 湘潭市| 高州市| 甘德县| 石首市| 泽州县|