策略模式

2021-01-08  本文已影响0人  半日孤独

背景

之前电商项目中增加了优惠券,优惠券有很多种类,增加了大量的if-else代码,所以使用策略模式进行改进。

适用场景

1.多种选择方式(及多个场景),每一种方式则是一个策略
2.使用场景:出行方式,优惠券则扣
3.策略对象需要实现某个共同的接口
4.解决代码耦合度,增强代码的扩展性

实现共同接口

/**
 * @author zzp
 * @ClassName Strategy
 * @Description 策略模式接口,优惠券策略
 * @createTime 2021年01月07日
 */
public interface Strategy {

     BigDecimal couponStrategy();
}

编写所需要的实现类

/**
 * @author zzp
 * @ClassName LimitTimeStrategy
 * @Description 限时优惠券处理
 * @createTime 2021年01月07日
 */
public class LimitTimeStrategy implements Strategy {
    @Override
    public BigDecimal couponStrategy() {
        //进行限时优惠券处理
        String price = "123";
        return new BigDecimal(price);
    }
}
/**
 * @author zzp
 * @ClassName LimitCountStrategy
 * @Description 限量优惠券
 * @createTime 2021年01月07日
 */
public class LimitCountStrategy implements Strategy {
    @Override
    public BigDecimal couponStrategy() {
        //限量优惠券处理
        String price = "123";
        return new BigDecimal(price);
    }
}
/**
 * @author zzp
 * @ClassName fullSubtractStrategy
 * @Description 满减优惠券
 * @createTime 2021年01月07日
 */
public class fullSubtractStrategy implements Strategy {
    @Override
    public BigDecimal couponStrategy() {
        //满减优惠券处理
        String price = "123";
        return new BigDecimal(price);
    }
}

调用

public class StrategyMain {

    Strategy strategy;
    public void setStrategy(Strategy strategy) {
        this.strategy = strategy;
    }

    public BigDecimal travelStyle(){
        return strategy.couponStrategy();
    }

    public static void main(String[] args) {
        StrategyMain traveler = new StrategyMain();
        //执行限时则扣券
        traveler.setStrategy(new LimitTimeStrategy());
        System.out.println(traveler.travelStyle());
        //执行限量折扣券
        traveler.setStrategy(new LimitCountStrategy());
        System.out.println(traveler.travelStyle());
        //执行满减折扣券
        traveler.setStrategy(new fullSubtractStrategy());
        System.out.println(traveler.travelStyle());

    }
}

优缺点

优点
缺点

扩展

内心OS:学艺不精的我就要用if-else直观,这样才能成为公司不可或缺的人才

上一篇 下一篇

猜你喜欢

热点阅读