一.创建接口
public interface Strategy {public int doOperation(int num1, int num2);}
二.创建具体的实现类,实现Stratery接口
public class OperationAdd implements Strategy{@Overridepublic int doOperation(int num1, int num2) {return num1 + num2;}}
public class OperationSubstract implements Strategy {@Overridepublic int doOperation(int num1, int num2) {return num1 - num2;}}
public class OperationMultiply implements Strategy{@Overridepublic int doOperation(int num1, int num2) {return num1 * num2;}}
三.创建Context 类,也即环境类
持有一个具体策略的对象构造函数,传入一个具体策略对象策略方法
public class Context {private Strategy strategy;public Context(Strategy strategy) {this.strategy = strategy;}public int executeStrategy(int num1, int num2){return strategy.doOperation(num1, num2);}}
四.Use the Context to see change in behaviour when it changes its Strategy
public class StrategyPatternDemo {public static void main(String[] args) {Context context = new Context(new OperationAdd());System.out.println("10 + 5 = " + context.executeStrategy(10, 5));context = new Context(new OperationSubstract());System.out.println("10 - 5 = " + context.executeStrategy(10, 5));context = new Context(new OperationMultiply());System.out.println("10 * 5 = " + context.executeStrategy(10, 5));}}
五.输出结果:
10 + 5 = 1510 - 5 = 510 * 5 = 50
=========================================================================
这个模式涉及到三个角色:
● 环境(Context)角色:持有一个Strategy的引用。
● 抽象策略(Strategy)角色:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。
● 具体策略(ConcreteStrategy)角色:包装了相关的算法或行为。
更多参考资料:
1) 英文原文:点击打开链接
2)《JAVA与模式》之策略模式 TODO文章很好,此模式是什么,为什么用它,如何使用,现实业务中具体应用,代码,以及优缺点都很详细. 3)Java源码分析 – 策略模式在Java集合框架实现代码中的体现点击打开链接
在Java的集合框架中,构造Map或者Set时传入Comparator比较器,或者创建比较器传入Collections类的静态方法中作为方法的参数为Collection排序时,都使用到了策略模式。
每一幢房子都有一种不同的颜色,