策略模式(Strategy):灵活切换算法 / 行为的优雅方案

策略模式是行为型设计模式的核心成员,核心目标是定义一系列算法 / 行为,将其封装为独立的策略类,使它们可互相替换,让算法变化独立于使用算法的客户端。

一、策略模式核心实现

核心特点
将算法 / 行为逻辑与使用逻辑解耦,策略类实现统一接口,客户端通过注入不同策略对象动态切换行为,无需修改原有代码。

// 1. 策略接口:定义支付行为规范
interface PaymentStrategy {
    void pay(double amount); // 统一支付方法
}

// 2. 具体策略1:微信支付
class WeChatPayStrategy implements PaymentStrategy {
    @Override
    public void pay(double amount) {
        System.out.println("微信支付:" + amount + "元");
    }
}

// 3. 具体策略2:支付宝支付
class AliPayStrategy implements PaymentStrategy {
    @Override
    public void pay(double amount) {
        System.out.println("支付宝支付:" + amount + "元");
    }
}

// 4. 上下文:使用策略的客户端类
class PaymentContext {
    private PaymentStrategy strategy; // 持有策略对象

    // 动态注入策略
    public void setStrategy(PaymentStrategy strategy) {
        this.strategy = strategy;
    }

    // 执行支付(委托给策略对象)
    public void executePay(double amount) {
        strategy.pay(amount);
    }
}

// 5. 客户端测试
public class StrategyTest {
    public static void main(String[] args) {
        PaymentContext context = new PaymentContext();
        
        // 切换为微信支付策略
        context.setStrategy(new WeChatPayStrategy());
        context.executePay(99.9); // 输出:微信支付:99.9元
        
        // 切换为支付宝支付策略
        context.setStrategy(new AliPayStrategy());
        context.executePay(199.9); // 输出:支付宝支付:199.9元
    }
}

优缺点

  • ✅ 优点:算法切换灵活;符合开闭原则(新增策略仅加类);避免大量 if-else 判断;解耦算法与使用逻辑;
  • ❌ 缺点:策略类数量随算法增多而增加;客户端需了解所有策略才能选择合适的实现。

适用场景
1、存在多种算法 / 行为,需动态切换(如支付方式、排序算法、校验规则);
2、避免使用大量 if-else/switch 判断不同业务逻辑;
3、算法需独立于客户端变化,且需复用不同场景。

最终目的:
灵活切换算法 / 行为;

SpringBoot 核心应用场景:
事务传播策略、负载均衡策略、ResourceLoader不同资源加载方式、环境配置加载策略

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容