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其它相關文章!

推薦閱讀: