策略设计模式 (Strategy Pattern)
简单介绍
举个栗子,领导让你做一个优惠券系统,比如满减和打折这两种类型的优惠券,这两种券的计算过程,可以看做“策略”。假如在结算的时候,用户使用了满减券,则需要“切换”到满减的策略上计算。
当然满减券也可以继续往下做策略,比如满元减、满件减等等。
策略模式,可以让我们在一个清晰的骨架下开发,当然产生的策略类也会很多。
代码实现
复制
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 31 32 33 |
public interface CouponCalculator{ // 计算方法 BigDecimal calculator(); } // 满减策略 public class ReduceCouponCalculator implements CouponCalculator { //满减券计算 BigDecimal calculator(){ // TODO ... return new BigDecimal(-5); } } // 打折策略 public class DiscountCouponCalculator implements CouponCalculator { //打折券计算 BigDecimal calculator(){ // TODO ... return new BigDecimal(-4); } } public class pay{ public void pay(){ //调用满减策略 CouponCalculator couponCalc = new ReduceCouponCalculator(); BigDecimal reduceMoney = couponCalc.calculator(); // 调用打折策略 CouponCalculator couponCalc = new ReduceCouponCalculator(); BigDecimal reduceMoney = couponCalc.calculator(); } } |
小结
在使用策略模式中,必须要结合多态的概念进行封装使用。
使用反射和SpringIOC可以灵活调用你的策略。