行为型设计模式之--策略模式

紧接着上面的模板方法设计模式,当用户支付时,其实用户是有优惠活动可以享受的,但是每个用户的具体情况不同,所选择的优惠活动是不一样的,有满减活动、首次购活动、新会员活动,等等一系列优惠。

为了避免一系列的if ... else的书写,我们使用策略模式进行优化:

首先是打折的抽象接口:

public interface Discount {
    public int calculate(int money);
}

下面是四种不同的打折策略:

/**
 * 满减
 */
public class FullDiscount implements Discount {
    @Override
    public int calculate(int money) {
        if (money > 200){
            System.out.println("优惠减免20元");
            return money - 20;
        }
        return money;
    }
}

/**
 * 假日全免
 */
public class HolidayDiscount implements Discount {
    @Override
    public int calculate(int money) {
        if (money > 100){
            return money - 20;
        }
        return money;
    }
}

/**
 * 首次购
 */
public class NewerDiscount implements Discount {
    @Override
    public int calculate(int money) {
        if (money > 100){
            return money - 20;
        }
        return money;
    }
}

/**
 * 第二单9折优惠
 */
public class SecondDiscount implements Discount {
    @Override
    public int calculate(int money) {
        Double balance =  money * 0.9;
        return balance.intValue();
    }
}

在使用时,只需要将这个折扣对象传入即可:

        ShoppingCart cart = new OnlineShopping(products);

        //注入优惠方案
        String discount = "second";
        cart.setDiscount(disCounts.get(discount));

最终调用的是discount的实现类,完成各个策略的最终选择。

猜你喜欢

转载自blog.csdn.net/cpcpcp123/article/details/107301564