大话设计模式之策略模式

背景:

商场促销期间,可能会出现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当成参数传递给一个方法。

posted @ 2018-05-06 20:40  浅夏丶未央  阅读(88)  评论(0编辑  收藏