1.一般情况下我们是将一种行为写成一个类方法,比如计算器类中有加、减、乘、除四种计算方式在类中就会写为四种方法,但是当我们提供一个jar包给别人调用的时候,不允许别人修改我们的方法,但是允许扩展方法。
而策略模式则是将每一种算法都写成一个类,然后动态的选择使用哪一个算法,同时也方便其他人进行自定义自己需要的方法。
2.先写一个通用的接口
/** * 策略模式接口 * * @author yuans * @create 2018-10-29-20:32 */ public interface Operation { public int doOperation(int num1, int num2); }
3.每一种算法都要实现这个接口
/** * 加法 * * @author yuans * @create 2018-10-29-20:34 */ public class OperationAdd implements Operation { @Override public int doOperation(int num1, int num2) { return num1 + num2; } }
/** * 减法 * * @author yuans * @create 2018-10-29-20:36 */ public class OperationSub implements Operation { @Override public int doOperation(int num1, int num2) { return num1 - num2; } }
4.编写计算方法类
/** * 计算类 * * @author yuans * @create 2018-10-29-20:36 */ public class Calculator { private Operation operation; public Calculator(Operation operation) { this.operation = operation; } public int doOperation(int num1, int num2) { return this.operation.doOperation(num1, num2); } }
5.编写测试方法
/** * 测试类 * 遵循开闭原则,只允许扩展功能,不允许修改原有功能 * @author yuans * @create 2018-10-29-20:38 */ public class StrategyMain { public static void main(String[] args) { OperationAdd operationAdd = new OperationAdd(); Calculator calculator = new Calculator(operationAdd); int i = calculator.doOperation(1, 2); System.out.println(i); System.out.println("-----------------------------------"); OperationSub operationSub = new OperationSub(); Calculator calculator2 = new Calculator(operationSub); int j = calculator2.doOperation(1, 2); System.out.println(j); } }
6.测试结果