java面向對象設計原則之里氏替換原則示例詳解
概念
里氏替換原則是任何基類出現的地方,子類一定可以替換它;是建立在基于抽象、多態(tài)、繼承的基礎復用的基石,該原則能夠保證系統(tǒng)具有良好的拓展性,同時實現基于多態(tài)的抽象機制,能夠減少代碼冗余。
實現
里氏替換原則要求我們在編碼時使用基類或接口去定義對象變量,使用時可以由具體實現對象進行賦值,實現變化的多樣性,完成代碼對修改的封閉,擴展的開放。如:商城商品結算中,定義結算接口Istrategy,該接口有三個具體實現類,分別為PromotionalStrategy (滿減活動,兩百以上百八折)、RebateStrategy (打折活動)、 ReduceStrategy(返現活動);
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; } } }
調用方為Context,在此類中使用接口定義了一個對象。其代碼如下:
public class Context { //使用基類定義對象變量 private Istrategy strategy; // 注入當前活動使用的具體對象 public void setStrategy(Istrategy strategy) { this.strategy = strategy; } // 計算并返回費用 public double cul(double consumePrice) { // 使用具體商品促銷策略獲得實際消費金額 double realPrice = this.strategy.realPrice(consumePrice); // 格式化保留小數點后1位,即:精確到角 BigDecimal bd = new BigDecimal(realPrice); bd = bd.setScale(1, BigDecimal.ROUND_DOWN); return bd.doubleValue(); } }
Context 中代碼使用接口定義對象變量,這個對象變量可以是實現了lStrategy接口的PromotionalStrategy、RebateStrategy 、 ReduceStrategy任意一個。
拓展
里氏替換原則和依賴倒置原則,構成了面向接口編程的基礎,正因為里氏替換原則,才使得程序呈現多樣性。
以上就是java面向對象設計原則之里氏替換原則示例詳解的詳細內容,更多關于java面向對象設計里氏替換原則的資料請關注腳本之家其它相關文章!
相關文章
聊聊Java 成員變量賦值和構造方法誰先執(zhí)行的問題
這篇文章主要介紹了聊聊Java 成員變量賦值和構造方法誰先執(zhí)行的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10