策略模式代码示例:
代码示例:
// 首先,我们定义一个接口 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); } }
如果不用策略模式代码示例:
方法
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 类,违反了开闭原则(对扩展开放,对修改关闭)。
代码冗余:每个运算方法都需要单独实现,代码重复度高。
优点
简单易懂:对于简单的应用场景,不需要额外的接口和类,代码更加直观。
因此,是否使用策略模式取决于具体的应用场景和需求。对于需要高度灵活性和可扩展性的系统,策略模式是一个很好的选择。而对于简单且固定的需求,直接使用具体的方法可能更加简单直接。