策略模式

title

策略模式(Strategy Pattern)是一种行为型设计模式,它允许在运行时动态地切换算法或策略。该模式定义了一组算法,将每个算法都封装起来,使它们之间可以互相替换,而不影响使用算法的客户端代码。

在策略模式中,定义一个策略接口(Strategy),所有的具体策略都实现该接口。同时,在策略模式中,策略接口通常只包含一个方法。这个方法包含了具体的算法,由具体的策略类实现。在使用策略模式的客户端代码中,需要维护一个对策略接口的引用,客户端代码可以根据需要切换策略。

以下是使用策略模式的一个简单示例代码:

// 策略接口
public interface Strategy {
    int execute(int a, int b);
}

// 具体策略A
public class ConcreteStrategyA implements Strategy {
    @Override
    public int execute(int a, int b) {
        return a + b;
    }
}

// 具体策略B
public class ConcreteStrategyB implements Strategy {
    @Override
    public int execute(int a, int b) {
        return a - b;
    }
}

// 上下文类
public class Context {
    private Strategy strategy;

    public Context(Strategy strategy) {
        this.strategy = strategy;
    }

    public void setStrategy(Strategy strategy) {
        this.strategy = strategy;
    }

    public int executeStrategy(int a, int b) {
        return strategy.execute(a, b);
    }
}

// 测试类
public class Main {
    public static void main(String[] args) {
        Context context = new Context(new ConcreteStrategyA());

        int result1 = context.executeStrategy(1, 2);
        System.out.println(result1);  // 输出:3

        context.setStrategy(new ConcreteStrategyB());

        int result2 = context.executeStrategy(1, 2);
        System.out.println(result2);  // 输出:-1
    }
}

在上述代码中,Strategy 接口定义了算法的接口,所有具体的策略都实现了该接口。ConcreteStrategyA 和 ConcreteStrategyB 是具体的策略类,它们分别实现了加法和减法算法。Context 是上下文类,它维护了一个对策略接口的引用。在使用策略模式的客户端代码中,需要先创建一个上下文对象,并指定一个具体的策略。客户端代码可以通过调用上下文对象的 executeStrategy() 方法,来执行具体的算法。在运行时,客户端代码可以通过调用上下文对象的 setStrategy() 方法,来动态地切换算法或策略。

powered by Gitbook© 2023 编外计划 | 最后修改: 2023-11-24 03:37:01

results matching ""

    No results matching ""