背景:
商场促销期间,可能会出现8折、5折的促销活动,也可能出现满100减10、满200减30的促销活动,设计一个收银系统。
策略模式:定义了算法家族,让它们之间可以互相替换,此模式让算法的变化不会影响到使用算法的客户。
UML类图:

Demo:
算法接口Strategy:
1 public interface Strategy {
2
3 void algorithmInterface();
4 }
具体算法ConcreteStrategyA:
1 public class ConcreteStrategyA implements Strategy {
2 @Override
3 public void algorithmInterface() {
4 System.out.println("算法A实现");
5 }
6 }
具体算法ConcreteStrategyB:
1 public class ConcreteStrategyB implements Strategy {
2 @Override
3 public void algorithmInterface() {
4 System.out.println("算法B实现");
5 }
6 }
Context上下文类:
1 public class Context {
2
3 private Strategy stagtegy;
4
5 public Context(String algorithm) {
6 switch (algorithm){
7 case "A":stagtegy = new ConcreteStrategyA();break;
8 case "B":stagtegy = new ConcreteStrategyB();break;
9 default:break;
10 }
11 }
12
13 public void contextInterface(){
14 stagtegy.algorithmInterface();
15 }
16 }
测试类:
1 public class Main {
2
3 public static void main(String[] args) {
4 Context context = new Context("A");
5 context.contextInterface();
6 }
7 }
总结:
策略模式在平时开发中比较常用,使用场景是:一个接口或抽象类有一组具体的实现,使用时使用接口或抽象类中的抽象方法,这样可根据传入的不同实例实现不同的策略。比如可以将上述的Strategy当成参数传递给一个方法。
500

被折叠的 条评论
为什么被折叠?



