设计模式-策略模式的使用方法

时间:2024-03-09 16:47:36

策略模式(Strategy Pattern)是一种行为设计模式,它使得你可以定义一系列算法,并将每个算法封装在一个类中,使得它们可以互换使用。策略模式使得算法可以独立于使用它的客户端进行变化。通过使用组合而不是继承,你可以动态改变算法的行为。

策略模式通常涉及三个关键部分:

  1. 策略接口(Strategy Interface):这是一个通用接口,它定义了所有支持的算法的公共操作。所有的策略类都实现此接口。
  2. 具体策略类(Concrete Strategy Classes):实现策略接口的类,每个类封装了一个支持的算法。
  3. 上下文(Context):使用策略接口的类。它维护对策略对象的引用,可以定义一个方法来设置策略,并可以有一个执行策略的方法。

如何实现策略模式

以下是在Java中实现策略模式的步骤和示例。

  1. 定义策略接口:
1public interface Strategy {
2    void execute();
3}
  1. 创建具体策略类:
1public class ConcreteStrategyA implements Strategy {
2    @Override
3    public void execute() {
4        System.out.println("执行策略 A");
5    }
6}
7
8public class ConcreteStrategyB implements Strategy {
9    @Override
10    public void execute() {
11        System.out.println("执行策略 B");
12    }
13}
  1. 实现上下文类:
1public class Context {
2    private Strategy strategy;
3
4    // 设置策略
5    public void setStrategy(Strategy strategy) {
6        this.strategy = strategy;
7    }
8
9    // 执行策略
10    public void executeStrategy() {
11        strategy.execute();
12    }
13}
  1. 客户端使用策略:
1public class Demo {
2    public static void main(String[] args) {
3        Context context = new Context();
4
5        // 使用策略A
6        Strategy strategyA = new ConcreteStrategyA();
7        context.setStrategy(strategyA);
8        context.executeStrategy();
9
10        // 切换到策略B
11        Strategy strategyB = new ConcreteStrategyB();
12        context.setStrategy(strategyB);
13        context.executeStrategy();
14    }
15}

在这个例子中,客户端代码创建了一个Context对象,并且可以通过调用setStrategy()来改变其策略。在executeStrategy()被调用时,上下文将使用其当前策略中的execute()方法。