里氏替换原则

发布时间 2023-04-08 14:23:19作者: 微辰

里氏替换原则

/**
 * 里氏替换原则(LSP)
 * 接口多实现,
 * 新建类,接口当参数入参,
 */
public class lspTest {

    //打折活动
    public interface Alarm {
        double addAlarm(double price);
    }

    //折扣不同,海康
    public static class HikAlarm implements Alarm {
        private static final double RATIO_EIGHT = 0.8;

        @Override
        public double addAlarm(double price) {
            return price * RATIO_EIGHT ;
        }
    }

    //折扣不同,天津
    public static class TianjAlarm implements Alarm {
        private static final double RATIO_NINE = 0.9;

        @Override
        public double addAlarm(double price) {
            return price * RATIO_NINE;
        }
    }

    public static class ShoppingCart {
        private final Alarm alarm;

        public ShoppingCart(Alarm alarm) {
            this.alarm = alarm;
        }

        public double cul() {
            return this.alarm.addAlarm(3000);
        }
    }

    public static void main(String[] args) {
        Alarm hikAlarm = new HikAlarm();
        ShoppingCart shoppingCart1 = new ShoppingCart(hikAlarm);
        double result1 = shoppingCart1.cul();
        System.out.println("八折 " + result1);

        Alarm tianjAlarm = new TianjAlarm();
        ShoppingCart shoppingCart2 = new ShoppingCart(tianjAlarm);
        double result2 = shoppingCart2.cul();
        System.out.println("九折 " + result2);
    }

}