设计模式——策略模式

策略模式是为了解决在做同一件事的时候,存在多种可能发生情况问题。

什么是策略模式

什么时候使用

如何使用

优缺点是什么


使用场景

一个商场中,针对不同的消费者,进行不同的消费打折促销,普通消费者打9.8折,VIP用户打8折,SVIP用户打7.5折,针对打折这件事,存在三种情况需要考虑,针对不同的人,使用不同的计算方式。这里就要使用策略模式去解决。

要素

  1. 针对问题的一个接口
  2. 接口的多种策略实现
  3. 一个接口的调用方

使用

1
2
3
4
5
6
7
8
/**
* Created by 迹_Jason on 2017/6/24.
* 策略模式接口
*/
public interface Discount {

Double discountMoney(Double total);
}
1
2
3
4
5
6
7
8
9
/**
* Created by 迹_Jason on 2017/6/24.
* 普通消费者打折力度
*/
public class CommonConsumerDiscount implements Discount {
public Double discountMoney(Double total) {
return total * 0.98;
}
}
1
2
3
4
5
6
7
8
9
/**
* Created by 迹_Jason on 2017/6/24.
* svip打折力度
*/
public class SvipConsumerDiscount implements Discount {
public Double discountMoney(Double total) {
return total * 0.75;
}
}
1
2
3
4
5
6
7
8
9
/**
* Created by 迹_Jason on 2017/6/24.
* vip打折力度
*/
public class VipConsumerDiscount implements Discount {
public Double discountMoney(Double total) {
return total * 0.8;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/**
* 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语句的使用

缺点

必须知道有哪些策略类,每个策略类的功能

如果策略很多,产生的策略实现类也非常多

迹_Jason wechat
分享快乐,感受科技的温度
坚持原创技术分享,您的支持将鼓励我继续创作!