策略模式通过将变化的行为封装为统一接口的不同实现,解耦条件判断与具体逻辑。当代码中存在多个if-else或switch-case根据类型选择行为时(如不同支付方式),可定义PaymentStrategy接口,由WeChatPay、AliPay等类实现各自支付逻辑。通过PaymentContext上下文运行时注入具体策略,避免重复判断。结合StrategyFactory工厂模式集中创建策略对象,调用方无需关心判断细节,新增策略只需添加新类并注册到工厂,无需修改原有代码,符合开闭原则。核心是分离变与不变,提升系统灵活性和可维护性。

当代码中出现大量 if-else 或 switch-case 判断,尤其是根据不同类型执行不同逻辑时,代码会变得难以维护和扩展。策略模式能有效解耦条件判断与具体行为,使系统更灵活、可扩展。
识别需要优化的复杂条件逻辑
以下情况适合使用策略模式:
多个 if-else 分支根据类型或状态选择执行逻辑 新增一种类型需要修改原有代码(违反开闭原则) 相同判断在多处重复出现
例如:订单根据支付方式(微信、支付宝、银联)执行不同处理逻辑,若用 if 判断,后续新增支付方式需不断修改代码。
定义统一策略接口
将变化的行为抽象为接口,每个具体策略实现该接口。
interface PaymentStrategy { void pay(BigDecimal amount);}class WeChatPay implements PaymentStrategy { public void pay(BigDecimal amount) { System.out.println("微信支付:" + amount); }}class AliPay implements PaymentStrategy { public void pay(BigDecimal amount) { System.out.println("支付宝支付:" + amount); }}
使用上下文管理策略
上下文类持有策略接口,运行时注入具体实现,避免条件判断。
class PaymentContext { private PaymentStrategy strategy; public PaymentContext(PaymentStrategy strategy) { this.strategy = strategy; } public void executePayment(BigDecimal amount) { strategy.pay(amount); }}
调用时根据类型选择策略:
// 根据用户选择动态切换策略PaymentStrategy strategy = "wechat".equals(type) ? new WeChatPay() : new AliPay();PaymentContext context = new PaymentContext(strategy);context.executePayment(new BigDecimal("100"));
结合工厂模式进一步解耦
若仍需判断来创建策略对象,可用简单工厂封装创建逻辑:
class StrategyFactory { public static PaymentStrategy getStrategy(String type) { return switch (type) { case "wechat" -> new WeChatPay(); case "alipay" -> new AliPay(); default -> throw new IllegalArgumentException("不支持的支付方式"); }; }}
这样主流程不再关心判断细节,只需:
PaymentStrategy strategy = StrategyFactory.getStrategy(userInput);new PaymentContext(strategy).executePayment(amount);
基本上就这些。通过策略模式,原本分散的条件判断被集中到工厂中,业务逻辑清晰,新增策略无需改动核心代码,符合开闭原则。关键是把“变”与“不变”分离,让系统更容易应对未来变化。
以上就是如何运用策略模式优化复杂的条件判断逻辑?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1524222.html
微信扫一扫
支付宝扫一扫