策略模式是为了解决在做同一件事的时候,存在多种可能发生情况问题。
什么是策略模式
什么时候使用
如何使用
优缺点是什么
使用场景
一个商场中,针对不同的消费者,进行不同的消费打折促销,普通消费者打9.8折,VIP用户打8折,SVIP用户打7.5折,针对打折这件事,存在三种情况需要考虑,针对不同的人,使用不同的计算方式。这里就要使用策略模式去解决。
要素
针对问题的一个接口
接口的多种策略实现
一个接口的调用方
使用
/** * Created by 迹_Jason on 2017/6/24. * 策略模式接口 */public interface Discount { Double discountMoney(Double total);}
/** * Created by 迹_Jason on 2017/6/24. * 普通消费者打折力度 */public class CommonConsumerDiscount implements Discount { public Double discountMoney(Double total) { return total * 0.98; }}
/** * Created by 迹_Jason on 2017/6/24. * svip打折力度 */public class SvipConsumerDiscount implements Discount { public Double discountMoney(Double total) { return total * 0.75; }}
/** * Created by 迹_Jason on 2017/6/24. * vip打折力度 */public class VipConsumerDiscount implements Discount { public Double discountMoney(Double total) { return total * 0.8; }}
/** * Created by 迹_Jason on 2017/6/24. * 调用策略接口 */public class SumMoney { Double sum(Discount consumerType) { Double total = 7 * 2 + 5.3 * 8; return consumerType.discountMoney(total); } public static void main(String[] args) { Discount consumerType = new CommonConsumerDiscount(); SumMoney sumMoney = new SumMoney(); System.out.println(sumMoney.sum(consumerType)); }}
优点
程序更加灵活,拓展性更好,可读性也更好
可以替换if-else语句的使用
缺点
必须知道有哪些策略类,每个策略类的功能
如果策略很多,产生的策略实现类也非常多