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

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

相关推荐
geovindu12 天前
java: Strategy Pattern
java·开发语言·后端·设计模式·策略模式·行为模式
geovindu13 天前
CSharp: Strategy Pattern
开发语言·后端·c#·.net·.netcore·策略模式·行为模式
沪上企服通15 天前
代账数据的可移植性设计:开放接口、账套导出与 exit strategy 工程笔记(上海 5 家样本对照)
笔记·策略模式
码匠许师傅15 天前
【设计模式精讲】26.策略模式(Strategy)
c++·设计模式·策略模式·uml
++==19 天前
基于策略模式的应用层协议支持
策略模式
Java后端的Ai之路19 天前
23、Python - 策略模式
linux·python·策略模式
user_admin_god21 天前
数据采集/交换系统设计经验
spring boot·spring·策略模式
Nontee1 个月前
Quartz 集群 + 策略模式:逾期预警推送系统设计实录
linux·服务器·策略模式
二炮手亮子1 个月前
从 BIO、NIO、AIO 到多路复用与 Netty
策略模式·nio