什么是策略模式?一般用在什么场景?

策略模式(面试Markdown)

概念

策略模式属于行为型设计模式 。

把不同的算法/业务逻辑 抽成独立的策略类,实现同一个公共接口;上下文类持有策略对象,业务逻辑可以动态切换,把算法和使用算法的业务代码解耦。

简单说:同一套行为有多种不同实现,运行时动态选择用哪一种 ,避免大量 if‑else / switch。

核心角色

  1. Strategy(策略接口):定义所有策略统一的方法规范
  2. ConcreteStrategy(具体策略):不同的业务实现,每个类对应一套算法
  3. Context(上下文):持有策略对象,对外提供调用入口,负责和策略交互

代码极简示例

java 复制代码
// 策略接口
public interface PayStrategy {
    void pay(long money);
}

// 具体策略:微信支付
class WechatPay implements PayStrategy{
    @Override
    public void pay(long money) {
        System.out.println("微信支付:"+money);
    }
}
// 具体策略:支付宝支付
class AliPay implements PayStrategy{
    @Override
    public void pay(long money) {
        System.out.println("支付宝支付:"+money);
    }
}

// 上下文
public class PayContext{
    private PayStrategy strategy;
    public PayContext(PayStrategy strategy){
        this.strategy = strategy;
    }
    public void executePay(long money){
        strategy.pay(money);
    }
}

// 使用
public class Test{
    public static void main(String[] args) {
        PayContext context = new PayContext(new AliPay());
        context.executePay(100);
    }
}

适用业务场景

  1. 同一业务,多种分支算法
    比如:多种支付方式、多种折扣计算(满减、折扣、优惠券)、多种文件导出(Excel/PDF/Word)。

如果不用策略模式,代码会写一堆 if‑else 判断支付类型,分支越来越多代码臃肿。

  1. 需要运行时动态切换算法

    根据前端参数、配置、用户类型,程序跑起来的时候才决定用哪一套逻辑。

  2. 需要隔离不同业务逻辑,便于扩展

    新增一种策略,只需要新增一个实现类,不用修改原有业务代码,符合开闭原则。

优缺点

✅ 优点

  • 消除大量if‑else、switch
  • 算法独立,方便单元测试
  • 扩展新策略只新增类,不改旧代码,遵守开闭原则
  • 运行时动态切换策略

❌ 缺点

  • 策略变多,会产生大量小策略类,类数量膨胀
  • 客户端需要理解各个策略的区别,才知道该选哪个策略

面试口语小结

策略模式就是把多种可替换的业务算法抽出来实现同一个接口,上下文持有策略对象,运行时动态替换。主要用来消灭复杂if‑else,新增业务逻辑不用改老代码。像支付、折扣计算这些多分支场景非常适合。

相关推荐
AlanAshley1 天前
四种镜像文件在各操作系统的使用用法及区别
策略模式·虚拟机
拆房老料2 天前
【第四部分:Agentic 智能体设计模式】17. Agent 路由模式详解:从意图识别到动态模型选择
java·设计模式·ai编程·策略模式
zhangfeng11335 天前
com.apple.quarantine 并不是乱码,而是 macOS Gatekeeper 给下载文件自动打上的“隔离属性
macos·策略模式
lpfasd1236 天前
Ollama 还是 LM Studio:在 24GB 的 M6 Mac 上,我把 Ollama 卸载了
macos·策略模式
福大大架构师每日一题8 天前
ollama v0.40.11发布:macOS原生语音生成上线,d3决策模型正式加入
macos·策略模式
AIex-YH11 天前
发酵罐里点一盏灯:光发酵,正在重算微藻蛋白的成本账
运维·制造·策略模式
snakecy12 天前
macOS 安装 LaTeX 全流程指南:从 MacTeX 到中文排版
macos·策略模式
钱栈up16 天前
从 macOS 切回 Windows,我用 5 个免费工具把 80% 操作习惯搬了回来
windows·macos·策略模式
kunicoding18 天前
C++ 策略模式实战:写一个可以“一键换输出“的日志系统
开发语言·c++·策略模式
峥嵘life19 天前
Android16 开机后立即打开相机闪退问题分析与解决总结
android·开发语言·数码相机·策略模式