策略模式是一种行为型设计模式,它定义了一系列的算法,将每个算法封装起来,并使它们可以相互替换。策略模式使得算法可以独立于客户端而变化。

在策略模式中,通常有以下角色:

1. 上下文(Context): 维护一个对策略对象的引用,可以在运行时切换算法。
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();
    }
}

2. 策略接口(Strategy): 定义了算法的接口,具体的算法实现将实现该接口。
public interface Strategy {
    void execute();
}

3. 具体策略(ConcreteStrategy): 实现了策略接口,提供了具体的算法实现。
public class ConcreteStrategyA implements Strategy {
    @Override
    public void execute() {
        System.out.println("Executing strategy A");
    }
}

public class ConcreteStrategyB implements Strategy {
    @Override
    public void execute() {
        System.out.println("Executing strategy B");
    }
}

4. 客户端代码: 创建上下文对象,将具体的策略对象传递给上下文,并调用上下文的方法执行具体的算法。
public class Client {
    public static void main(String[] args) {
        // 创建上下文对象,初始策略为ConcreteStrategyA
        Context context = new Context(new ConcreteStrategyA());

        // 执行策略A
        context.executeStrategy();

        // 切换到策略B
        context.setStrategy(new ConcreteStrategyB());

        // 执行策略B
        context.executeStrategy();
    }
}

在这个例子中,Context 类维护了一个对 Strategy 接口的引用,客户端可以通过调用 setStrategy 方法在运行时切换具体的算法。ConcreteStrategyA 和 ConcreteStrategyB 分别是两个具体的算法实现。

策略模式使得算法可以独立于客户端而变化,客户端代码不需要知道具体的算法,只需与 Strategy 接口进行交互。这提高了代码的灵活性和可维护性。


转载请注明出处:http://www.pingtaimeng.com/article/detail/13959/设计模式