软件编程
位置:首页>> 软件编程>> java编程>> java面向对象设计原则之里氏替换原则示例详解

java面向对象设计原则之里氏替换原则示例详解

作者:guoyp2126  发布时间:2023-02-02 05:04:41 

标签:面向对象,里氏替换,设计原则

概念

里氏替换原则是任何基类出现的地方,子类一定可以替换它;是建立在基于抽象、多态、继承的基础复用的基石,该原则能够保证系统具有良好的拓展性,同时实现基于多态的抽象机制,能够减少代码冗余。

实现

里氏替换原则要求我们在编码时使用基类或接口去定义对象变量,使用时可以由具体实现对象进行赋值,实现变化的多样性,完成代码对修改的封闭,扩展的开放。如:商城商品结算中,定义结算接口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任意一个。

拓展

里氏替换原则和依赖倒置原则,构成了面向接口编程的基础,正因为里氏替换原则,才使得程序呈现多样性。

来源:https://blog.csdn.net/guoyp2126/article/details/113919502

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com