行为型模式之策略模式

策略模式(Strategy Pattern)

策略模式是一种行为型设计模式,用于实现在运行时选择算法或策略的能力。它通过将不同的算法或策略封装成独立的类,并使它们可以互相替换,从而实现动态改变对象的行为。

提供demo版代码更容易理解

/**
 * @author zhou
 *  策略接口
 */
interface Strategy {
    void execute();
}

/**
 * @author zhou
 *  具体策略A
 */
class ConcreteStrategyA implements Strategy {
    public void execute() {
        System.out.println("执行策略A");
    }
}

/**
 * @author zhou
 *  具体策略B
 */
class ConcreteStrategyB implements Strategy {
    public void execute() {
        System.out.println("执行策略B");
    }
}

/**
 * @author zhou
 *  上下文
 */
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();
    }
}

/**
 * @author zhou
 *  客户端代码
 */
public class Main {
    public static void main(String[] args) {
        // 创建上下文对象,初始策略为A
        Context context = new Context(new ConcreteStrategyA());

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

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

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

我们定义了一个策略接口 Strategy,具体策略类 ConcreteStrategyA 和 ConcreteStrategyB 实现了该接口。
上下文类 Context 中维护了一个策略对象,并通过 setStrategy 方法可以进行策略的切换,executeStrategy 方法调用当前策略对象的 execute 方法来执行具体的策略。

在 Main 类的 main 方法中,我们创建了一个 Context 对象,并初始策略为 ConcreteStrategyA,然后调用 executeStrategy 方法来执行策略A的行为。接着使用 setStrategy 方法将策略切换为B,并再次调用 executeStrategy 方法来执行策略B的行为。

该示例展示了如何使用策略模式来实现在运行时动态选择算法或策略,并将不同的策略封装成独立的类,提高了代码的可扩展性和灵活性。通过变更策略对象,可以在不修改上下文类的情况下改变对象的行为。

你可能感兴趣的:(计算机基础,策略模式)