策略模式(Strategy Pattern)是行为设计模式之一,它使你能在运行时改变对象的行为。在策略模式中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为模式。
在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的上下文对象。策略对象更改上下文对象的执行算法。
优点:
缺点:
策略模式对应于解决某一个问题的算法族,允许用户从该算法族中任选一个算法解决某一问题,同时可以方便的更换算法或者增加新的算法,并且有客户端决定调用那个算法。
使用策略模式,对应两个数进行加减乘除操作
实现步骤:
Strategy.java
// 策略接口
public interface Strategy {
// 定义操作接口
int dealOperation(int num1,int num2);
}
OperationAdd.java
// 具体策略类-加法
public class OperationAdd implements Strategy{
@Override
public int dealOperation(int num1, int num2) {
return num1 + num2;
}
}
OperationSubtract.java
// 具体策略类-减法
public class OperationSubtract implements Strategy {
@Override
public int dealOperation(int num1, int num2) {
return num1 - num2;
}
}
OperationMultiply.java
// 具体策略类-乘法
public class OperationMultiply implements Strategy {
@Override
public int dealOperation(int num1, int num2) {
return num1 * num2;
}
}
OperationDivide.java
// 具体策略类-除法
public class OperationDivide implements Strategy {
@Override
public int dealOperation(int num1, int num2) {
return num1 / num2;
}
}
Context.java
// 上限文类
public class Context {
private Strategy strategy;
public Context(Strategy strategy) {
this.strategy = strategy;
}
public int executeStrategy(int num1, int num2) {
return strategy.dealOperation(num1, num2);
}
}
TestClient.java
public class TestClient {
public static void main(String[] args) {
Context context = new Context(new OperationAdd());
System.out.printf("选择加法-执行结果:%s%n",context.executeStrategy(5,2));
context = new Context(new OperationMultiply());
System.out.printf("选择乘法-执行结果:%s%n",context.executeStrategy(5,2));
}
}
执行结果: