
策略模式面试Markdown概念策略模式属于行为型设计模式。把不同的算法/业务逻辑抽成独立的策略类实现同一个公共接口上下文类持有策略对象业务逻辑可以动态切换把算法和使用算法的业务代码解耦。简单说同一套行为有多种不同实现运行时动态选择用哪一种避免大量if‑else / switch。核心角色Strategy策略接口定义所有策略统一的方法规范ConcreteStrategy具体策略不同的业务实现每个类对应一套算法Context上下文持有策略对象对外提供调用入口负责和策略交互代码极简示例// 策略接口publicinterfacePayStrategy{voidpay(longmoney);}// 具体策略微信支付classWechatPayimplementsPayStrategy{Overridepublicvoidpay(longmoney){System.out.println(微信支付money);}}// 具体策略支付宝支付classAliPayimplementsPayStrategy{Overridepublicvoidpay(longmoney){System.out.println(支付宝支付money);}}// 上下文publicclassPayContext{privatePayStrategystrategy;publicPayContext(PayStrategystrategy){this.strategystrategy;}publicvoidexecutePay(longmoney){strategy.pay(money);}}// 使用publicclassTest{publicstaticvoidmain(String[]args){PayContextcontextnewPayContext(newAliPay());context.executePay(100);}}适用业务场景同一业务多种分支算法比如多种支付方式、多种折扣计算满减、折扣、优惠券、多种文件导出Excel/PDF/Word。如果不用策略模式代码会写一堆 if‑else 判断支付类型分支越来越多代码臃肿。需要运行时动态切换算法根据前端参数、配置、用户类型程序跑起来的时候才决定用哪一套逻辑。需要隔离不同业务逻辑便于扩展新增一种策略只需要新增一个实现类不用修改原有业务代码符合开闭原则。优缺点✅ 优点消除大量if‑else、switch算法独立方便单元测试扩展新策略只新增类不改旧代码遵守开闭原则运行时动态切换策略❌ 缺点策略变多会产生大量小策略类类数量膨胀客户端需要理解各个策略的区别才知道该选哪个策略面试口语小结策略模式就是把多种可替换的业务算法抽出来实现同一个接口上下文持有策略对象运行时动态替换。主要用来消灭复杂if‑else新增业务逻辑不用改老代码。像支付、折扣计算这些多分支场景非常适合。