策略模式

策略模式代码示例:

代码示例:

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

posted @ 2024-10-17 15:38  人在代码在  阅读(74)  评论(0)    收藏  举报