策略模式
策略模式代码示例:
代码示例:
// 首先,我们定义一个接口 MathOperation,表示数学操作的策略
// 定义策略接口
interface MathOperation {
int operate(int a, int b);
}
// 实现加法策略
class Addition implements MathOperation {
@Override
public int operate(int a, int b) {
return a + b;
}
}
// 实现减法策略
class Subtraction implements MathOperation {
@Override
public int operate(int a, int b) {
return a - b;
}
}
// 实现乘法策略
class Multiplication implements MathOperation {
@Override
public int operate(int a, int b) {
return a * b;
}
}
// 然后,我们创建一个 Calculator 类,它接受一个数学操作策略,并根据用户的选择执行相应的操作
class Calculator {
private MathOperation operation;
public void setOperation(MathOperation operation) {
this.operation = operation;
}
public int performOperation(int a, int b) {
if (operation != null) {
return operation.operate(a, b);
}
throw new IllegalStateException("No operation set");
}
}
// 在这个示例中,我们通过创建不同的数学操作策略类来实现加法、减法和乘法功能,并通过设置不同的策略来执行不同的操作。这就是策略模式的基本思想。
public class StrategyPatternExample {
public static void main(String[] args) {
Calculator calculator = new Calculator();
calculator.setOperation(new Addition());
int result1 = calculator.performOperation(5, 3);
System.out.println("Addition Result: " + result1);
calculator.setOperation(new Subtraction());
int result2 = calculator.performOperation(10, 4);
System.out.println("Subtraction Result: " + result2);
calculator.setOperation(new Multiplication());
int result3 = calculator.performOperation(6, 2);
System.out.println("Multiplication Result: " + result3);
}
}
如果不用策略模式代码示例:
class Calculator {
// 直接提供加法、减法和乘法方法
public int add(int a, int b) {
return a + b;
}
public int subtract(int a, int b) {
return a - b;
}
public int multiply(int a, int b) {
return a * b;
}
}
public class NonStrategyPatternExample {
public static void main(String[] args) {
Calculator calculator = new Calculator();
// 调用加法方法
int result1 = calculator.add(5, 3);
System.out.println("Addition Result: " + result1);
// 调用减法方法
int result2 = calculator.subtract(10, 4);
System.out.println("Subtraction Result: " + result2);
// 调用乘法方法
int result3 = calculator.multiply(6, 2);
System.out.println("Multiplication Result: " + result3);
}
}
在这个不使用策略模式的示例中,Calculator 类直接提供了 add、subtract 和 multiply 方法来执行加法、减法和乘法运算。这种方式虽然简单直接,但缺乏策略模式带来的灵活性和可扩展性。
缺点
扩展性差:如果未来需要添加新的运算(如除法),则需要修改 Calculator 类,违反了开闭原则(对扩展开放,对修改关闭)。
代码冗余:每个运算方法都需要单独实现,代码重复度高。
优点
简单易懂:对于简单的应用场景,不需要额外的接口和类,代码更加直观。
因此,是否使用策略模式取决于具体的应用场景和需求。对于需要高度灵活性和可扩展性的系统,策略模式是一个很好的选择。而对于简单且固定的需求,直接使用具体的方法可能更加简单直接。

浙公网安备 33010602011771号