好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

概念

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

实现

里氏替换原则要求我们在编码时使用基类或接口去定义对象变量,使用时可以由具体实现对象进行赋值,实现变化的多样性,完成代码对修改的封闭,扩展的开放。如:商城商品结算中,定义结算接口Istrategy,该接口有三个具体实现类,分别为PromotionalStrategy (满减活动,两百以上百八折)、RebateStrategy (打折活动)、 ReduceStrategy(返现活动);

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

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,在此类中使用接口定义了一个对象。其代码如下:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

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

原文链接:https://blog.csdn.net/guoyp2126/article/details/113919502

查看更多关于java面向对象设计原则之里氏替换原则示例详解的详细内容...

  阅读:17次