先看一下策略模式的三个角色:
抽象策略:仅提供一个抽象方法,环境类调用抽象策略的方法,根据实际应用情况由适合的具体策略对象去实现
具体抽象:负责实现抽象策略定义的接口
环境类:环境类负责引用抽象策略,并交给客户端来使用。
简单来说就是客户端调用环境类,环境类调用抽象策略,具体的算法由不同的具体策略来实现。
抽象策略
public interface algorithm { int returnNumber(int a,int b); }
具体策略1
public class getSum implements algorithm{ @Override public int returnNumber(int a, int b) { return a+b; } }
具体策略2
public class getBigger implements algorithm { @Override public int returnNumber(int a, int b) { return a = a > b ? a : b; } }
环境类
public class Context { algorithm algorithm; public Context(algorithm algorithm) { this.algorithm = algorithm; } public int algorithm(int a,int b){ return algorithm.returnNumber(a,b); } }
测试类
public class Client { public static void main(String[] args) { Context context = new Context(new getBigger()); System.out.println(context.algorithm(10,20)); Context context1 = new Context(new getSum()); System.out.println(context1.algorithm(10,20)); } }
可以看出,环境类只是一个对抽象策略类有关联作用的类而已,并提供一个方法给客户端类调用。具体的算法由具体策略类来实现。当添加新的方法的时候,不需要修改源代码,只需要添加一个新的具体策略类,环境类无需改变。
应用场景:多个类只是具体实现不同,这时候可以使用策略模式,在运行的时候动态的选择具体要执行的行为。