Java策略模式
策略模式是一种行为型设计模式,它允许在运行时动态地改变对象的行为。在Java中,策略模式通常由一个接口和多个实现该接口的类组成。
下面是一个简单的例子,假设有一个计算器类,它可以执行加、减、乘、除四种操作。我们可以使用策略模式来实现这个计算器类,使得它可以在运行时动态地改变操作。
首先,我们定义一个接口`Operation`,它包含一个`calculate`方法,用于执行具体的操作:
public interface Operation {
double calculate(double num1, double num2);
}
然后,我们实现四个具体的操作类,分别是加、减、乘、除:
public class AddOperation implements Operation {
@Override
public double calculate(double num1, double num2) {
return num1 + num2;
}
}
public class SubOperation implements Operation {
@Override
public double calculate(double num1, double num2) {
return num1 - num2;
}
}
public class MulOperation implements Operation {
@Override
public double calculate(double num1, double num2) {
return num1 * num2;
}
}
public class DivOperation implements Operation {
@Override
public double calculate(double num1, double num2) {
if (num2 == 0) {
throw new IllegalArgumentException("除数不能为0");
}
return num1 / num2;
}
}
最后,我们定义一个计算器类`Calculator`,它包含一个`operation`成员变量,用于保存当前的操作。`Calculator`类还包含一个`setOperation`方法,用于设置当前的操作,以及一个`calculate`方法,用于执行计算:
public class Calculator {
private Operation operation;
public void setOperation(Operation operation) {
this.operation = operation;
}
public double calculate(double num1, double num2) {
if (operation == null) {
throw new IllegalStateException("操作未设置");
}
return operation.calculate(num1, num2);
}
}
现在,我们可以使用策略模式来创建一个计算器对象,并动态地改变操作:
Calculator calculator = new Calculator();
calculator.setOperation(new AddOperation());
double result = calculator.calculate(1, 2); // 3.0
calculator.setOperation(new SubOperation());
result = calculator.calculate(3, 2); // 1.0
calculator.setOperation(new MulOperation());
result = calculator.calculate(2, 3); // 6.0
calculator.setOperation(new DivOperation());
result = calculator.calculate(6, 3); // 2.0
通过使用策略模式,我们可以在运行时动态地改变计算器的操作,而不需要修改计算器类的代码。这样,我们可以更加灵活地使用计算器类,同时也更容易扩展和维护。