模式思想
- 约定一些接口
- 定义策略类实现这些接口
- 定义一个策略切换类让其能切换调用不同的策略类
代码实现
- 接口类
package strategy;
public interface Strategy {
int doOperation(int num1, int num2);
}
- 策略类
package strategy;
public class OperationAdd implements Strategy {
public int doOperation(int num1, int num2) {
return num1 + num2;
}
}
package strategy;
public class OperationMultiply implements Strategy {
public int doOperation(int num1, int num2) {
return num1 * num2;
}
}
package strategy;
public class OperationSubtract implements Strategy {
public int doOperation(int num1, int num2) {
return num1 - num2;
}
}
- 策略切换类
package strategy;
public class Context {
private Strategy strategy;
public Context(Strategy strategy) {
this.strategy = strategy;
}
public int executeStrategy(int num1, int num2) {
return this.strategy.doOperation(num1, num2);
}
}
- 调用策略切换类用于生产
import strategy.*;
public class StrategyDemo {
public static void main(String[] args) {
int num1 = 10;
int num2 = 2;
int res;
Context context = new Context(new OperationAdd());
res = context.executeStrategy(num1, num2);
System.out.println("add num1 and num2 is " + res);
context = new Context(new OperationSubtract());
res = context.executeStrategy(num1, num2);
System.out.println("subtract num2 from num1 is " + res);
context = new Context(new OperationMultiply());
res = context.executeStrategy(num1, num2);
System.out.println("multiply num1 by num2 is " + res);
}
}
指导文档
http://www.runoob.com/design-pattern/strategy-pattern.html