策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。(原文:The Strategy Pattern defines a family of algorithms,encapsulates each one,and makes them interchangeable. Strategy lets the algorithm vary independently from clients that use it.)
应用场景:
1、 多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。
2、 需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现。(例如FlyBehavior和QuackBehavior的具体实现可任意变化或扩充)
3、 对客户(Duck)隐藏具体策略(算法)的实现细节,彼此完全独立。
代码:
- public interface Stratege {
- int compute(int firstNumber, int secondNumber);
- }
其下定义了算法的各种实现,例如加、减、乘、除等
Operator环境:
- public class Context {
- private Stratege stratege;
- private int firstNumber;
- private int secondNumber;
- /**
- * @param stratege
- */
- public Context(Stratege stratege) {
- super();
- this.stratege = stratege;
- }
- public int getFirstNumber() {
- return firstNumber;
- }
- public void setFirstNumber(int firstNumber) {
- this.firstNumber = firstNumber;
- }
- public int getSecondNumber() {
- return secondNumber;
- }
- public void setSecondNumber(int secondNumber) {
- this.secondNumber = secondNumber;
- }
- public int getResult() {
- return this.stratege.compute(firstNumber, secondNumber);
- }
- }
使用,即单元测试:
- public class Junit {
- public static void main(String[] args) {
- Stratege stratege = new Minas();
- Context context = new Context(stratege);
- context.setFirstNumber(10);
- context.setSecondNumber(15);
- System.out.println(context.getResult());
- }
- }