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

网友投稿 305 2022-12-01

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 {

JBxfIMgyreturn 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面向对象设计里氏替换原则的资料请关注我们其它相关文章!

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Mikefile文件的工作原理
下一篇:java求1-1/3+1/5-1/7+1/9
相关文章

 发表评论

暂时没有评论,来抢沙发吧~