java面向對象設計原則之裡氏替換原則示例詳解
概念
裡氏替換原則是任何基類出現的地方,子類一定可以替換它;是建立在基於抽象、多態、繼承的基礎復用的基石,該原則能夠保證系統具有良好的拓展性,同時實現基於多態的抽象機制,能夠減少代碼冗餘。
實現
裡氏替換原則要求我們在編碼時使用基類或接口去定義對象變量,使用時可以由具體實現對象進行賦值,實現變化的多樣性,完成代碼對修改的封閉,擴展的開放。如:商城商品結算中,定義結算接口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面向對象設計裡氏替換原則的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- 聊聊Java Double相加出現的怪事
- java 使用BigDecimal進行貨幣金額計算的操作
- java中BigDecimal用法詳解
- 註意Java中 new BigDecimal(double val) 的使用
- Java中求Logn/log2 的精度問題