设计模式之策略模式

java 复制代码
// 定义策略接口
interface Strategy {
    void execute();
}

// 实现具体策略1
class ConcreteStrategy1 implements Strategy {
    @Override
    public void execute() {
        System.out.println("执行策略1");
    }
}

// 实现具体策略2
class ConcreteStrategy2 implements Strategy {
    @Override
    public void execute() {
        System.out.println("执行策略2");
    }
}

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

    // 设置具体策略
    public void setStrategy(Strategy strategy) {
        this.strategy = strategy;
    }

    // 调用策略的执行方法
    public void executeStrategy() {
        strategy.execute();
    }
}

public class StrategyPatternDemo {
    public static void main(String[] args) {
        // 创建上下文对象
        Context context = new Context();

        // 设置具体策略1
        Strategy strategy1 = new ConcreteStrategy1();
        context.setStrategy(strategy1);

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

        // 设置具体策略2
        Strategy strategy2 = new ConcreteStrategy2();
        context.setStrategy(strategy2);

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

在这个示例中,首先定义了一个策略接口 Strategy,其中包含一个 execute() 方法表示执行策略的操作。然后,分别实现了两个具体策略类 ConcreteStrategy1 和 ConcreteStrategy2,它们分别实现了不同的策略。接着,我们定义了一个上下文类 Context,该类有一个成员变量 strategy 表示当前采用的策略。

在主函数中,我们创建了一个上下文对象 Context,并设置具体的策略1,然后调用上下文对象的 executeStrategy() 方法,执行了策略1。接着,我们又设置了具体的策略2,并再次调用 executeStrategy() 方法,执行了策略2。

运行上述示例代码,输出结果为:

bash 复制代码
执行策略1
执行策略2

通过使用策略模式,可以使得算法的选择和使用与算法的实现相分离。上下文类通过持有策略对象,可以根据需求动态地切换不同的策略,从而实现不同的行为。这样既增加了代码的灵活性,又避免了大量的条件语句。希望这个示例能够帮助你理解策略模式的使用。

相关推荐
星心源七境36 分钟前
七境体系全解析:从六韬兵法到AI锁颜,一套贯穿古典智慧与现代应用的成长操作系统
人工智能·设计模式·设计
qq_297574672 小时前
设计模式系列文章(基础篇第21篇):迭代器模式——遍历聚合解耦,实现统一迭代访问
设计模式·迭代器模式
禅思院4 小时前
前端请求取消与调度完全指南:从 AbortController 到企业级优先级架构
前端·设计模式·前端框架
小bo波4 小时前
用匿名内部类优雅地计算方法执行时间
java·设计模式·性能测试·模板方法模式·lambda·代码优化·匿名内部类
写代码的小阿帆5 小时前
行为型设计模式之观察者(发布-订阅)模式
设计模式
王_teacher6 小时前
23种设计模式全解析(GoF 设计模式)
设计模式·软考·软件设计师·软考中级
阿坤带你走近大数据7 小时前
分别介绍下java主流的开发框架、设计模式与对应编程语言的高级特性
java·开发语言·设计模式
geovindu7 小时前
go: Coroutines Pattern
开发语言·后端·设计模式·golang·协程模式
Anastasiozzzz8 小时前
构建健壮软件系统的基石:深入解析面向对象设计七大原则
开发语言·javascript·设计模式·ecmascript
qq_297574671 天前
设计模式系列文章(基础篇第19篇):中介者模式——封装交互关系,解耦网状依赖
设计模式·交互·中介者模式