一、定义
定义一系列的算法,把每一个算法封装起来,并且使它们可相互替换。
在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。
策略模式的角色:
抽象策略角色(Strategy):策略类,通常由一个接口或者抽象类实现
具体策略角色(ConcreteStrategy):包装了相关的算法和行为
环境角色(Context):持有一个策略类的引用,最终给客户端调用
二、案例
抽象策略角色:
package com.wuychn.strategy;
public interface Strategy {
int doOperation(int num1, int num2);
}
具体策略角色:
package com.wuychn.strategy;
public class OperationAdd implements Strategy {
@Override
public int doOperation(int num1, int num2) {
return num1 + num2;
}
}
package com.wuychn.strategy;
public class OperationSubstract implements Strategy {
@Override
public int doOperation(int num1, int num2) {
return num1 - num2;
}
}
package com.wuychn.strategy;
public class OperationMultiply implements Strategy {
@Override
public int doOperation(int num1, int num2) {
return num1 * num2;
}
}
环境角色:
package com.wuychn.strategy;
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);
}
}
测试代码:
package com.wuychn.strategy;
public class Test {
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));
}
}
三、策略模式和工厂模式的区别
工厂模式是创建型的设计模式,它接受指令,创建出符合要求的实例;而策略模式是行为型的,它接受已经创建好的实例,实现不同的行为。
原文: