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

策略模式(面试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,新增业务逻辑不用改老代码。像支付、折扣计算这些多分支场景非常适合。

相关推荐
happy_baymax7 小时前
Dell G3 3590 黑苹果实战:OpenCore 1.0.8 + NullMoth 驱动让 GTX 1660 跑起 Metal
策略模式
遇码8 小时前
macOS 触摸板捏合在 GPUI 里无响应:vendor 打补丁,把手势合成为 cmd+滚轮事件
rust·图形渲染·策略模式·桌面应用·gpui
mmsx1 天前
Android 架构分层:MVVM 与 MVP 共存,网络层怎么切
android·策略模式·mvvm·mvp
博风1 天前
7、设计模式应用举例:策略模式:加密、解密文件
设计模式·策略模式
mmsx1 天前
Android 本地优先的三级语义理解降级链
android·数码相机·策略模式
早点睡觉好了1 天前
LangChain 源码入门 02:消息、ChatPromptTemplate 与 Chat Model 调用链
ai·langchain·策略模式
花间相见2 天前
【计算基础|网络12】TCP 抓包与经典边界问题
网络·tcp/ip·策略模式
花间相见2 天前
【计算基础|网络11】TCP(下):拥塞控制与参数优化
网络·tcp/ip·策略模式
小羊没烦恼!3 天前
OS X 上使用.NET开发应用程序
开发语言·前端·数据库·人工智能·c#·策略模式
沫璃染墨8 天前
《Linux工程实践篇(一):认识设计模式——从日志系统看策略模式》
linux·c++·安全·设计模式·策略模式