Dotcpp  >  编程教程  >  行为型模式(Behavioral Patterns)  >  策略模式

策略模式

点击打开在线编译器,边学边练

策略模式允许在运行时动态地改变算法或行为,而不需要修改客户端代码。这种模式将算法封装成独立的策略类,使得它们可以相互替换,以实现不同的行为。

在实际应用中,策略模式非常适合用于实现一系列的算法或行为,而每个算法或行为都可以单独地进行修改或扩展。它还可以让客户端代码更加清晰和简洁,避免使用复杂的条件语句。

在策略模式中,通常会存在一个上下文类(Context)和一组策略类(Strategy)。上下文类持有一个策略类的引用,并且提供一个可以替换策略的方法。客户端代码通过上下文类来调用不同的策略。

策略模式

下面是一个简单的Java示例,展示了如何使用策略模式:

public interface Strategy {
    void execute();
}
public class StrategyA implements Strategy {
    @Override
    public void execute() {
        System.out.println("Executing Strategy A");
    }
}
public class StrategyB implements Strategy {
    @Override
    public void execute() {
        System.out.println("Executing Strategy B");
    }
}
public class Context {
    private Strategy strategy;
    public Context(Strategy strategy) {
        this.strategy = strategy;
    }
    public void setStrategy(Strategy strategy) {
        this.strategy = strategy;
    }
    public void executeStrategy() {
        strategy.execute();
    }
}
public class StrategyPatternDemo {
    public static void main(String[] args) {
        Strategy strategyA = new StrategyA();
        Context context = new Context(strategyA);
        context.executeStrategy();
        Strategy strategyB = new StrategyB();
        context.setStrategy(strategyB);
        context.executeStrategy();
    }
}

在这个示例中,我们定义了一个 Strategy 接口,两个具体的策略类 StrategyA 和 StrategyB 实现了这个接口。

Context 类是上下文类,它持有一个策略类的引用,并提供了 setStrategy() 方法来替换策略。executeStrategy() 方法用于执行当前的策略。

在客户端代码中,我们首先创建了一个 Context 对象,并将 StrategyA 作为初始策略传递给它,然后调用 executeStrategy() 方法执行策略。接着,我们替换为 StrategyB 并再次执行策略。

通过使用策略模式,我们可以在运行时动态地改变算法或行为,而不需要修改客户端代码。这种灵活性和可扩展性使得策略模式在许多场景下都非常有用。


本文固定URL:https://www.dotcpp.com/course/1386

上一课:

空对象模式

下一课:

模板模式

Dotcpp在线编译      (登录可减少运行等待时间)