大话设计模式之策略模式
背景:
商场促销期间,可能会出现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当成参数传递给一个方法。