(十六)责任链模式

2019-08-27  本文已影响0人  feiry

订单的优惠券可以叠加使用,应该如何做呢


业务流程

责任链模式

一个功能处理的结果,需要传递给下一个功能对象


责任链

一个优惠券处理完成后,将结果传递给下一个优惠券处理,形成一个链表


责任链
public interface Discount {
    public int calculate(int money);
}
/**
  * 责任链父类
  */
public abstract class MultyDiscount implements Discount{
    protected MultyDiscount nextMultyDiscount;

    public MultyDiscount(MultyDiscount nextMultyDiscount){
        this.nextMultyDiscount = nextMultyDiscount;
    }

    public int calculate(int money){
        if (this.nextMultyDiscount != null){
            return this.nextMultyDiscount.calculate(money);
        }
        return money;
    }

}
/**
 * 满减
 */
public class FullMultyDiscount extends MultyDiscount {
    public FullMultyDiscount(MultyDiscount nextMultyDiscount) {
        super(nextMultyDiscount);
    }

    @Override
    public int calculate(int money) {
        if (money > 200){
            System.out.println("优惠满减20元");
            money = money - 20;
        }

        return super.calculate(money);
    }
}
/**
 * 第二单9折优惠
 */
public class SecondMultyDiscount extends MultyDiscount {
    public SecondMultyDiscount(MultyDiscount nextMultyDiscount) {
        super(nextMultyDiscount);
    }

    @Override
    public int calculate(int money) {
        System.out.println("第二单打9折");
        Double balance =  money * 0.9;

        return super.calculate(balance.intValue());
    }
}

责任链父类持有下一个MultyDiscount,只要next不为空,就传递结果执行

    private Discount discount;
    private List<Fruit> products = new ArrayList<>();

    public ShoppingCart(List<Fruit> products){
        this.products = products;
    }

    public void setDiscount(Discount discount) {
        this.discount = discount;
    }

    //提交订单主流程
    public void submitOrder(){
        //优惠减免
        money = discount.calculate(money);
        System.out.println("优惠减免后:"+ money+"元,");

    }

总结

上一篇下一篇

猜你喜欢

热点阅读