Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
如何运用策略模式优化复杂的条件判断逻辑?_创想鸟

如何运用策略模式优化复杂的条件判断逻辑?

策略模式通过将变化的行为封装为统一接口的不同实现,解耦条件判断与具体逻辑。当代码中存在多个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

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
在Mongoose中实现好友关系:更新User Schema中的好友数组
上一篇 2025年12月20日 16:37:00
JavaScript中的正则表达式有哪些不为人知的高级技巧?
下一篇 2025年12月20日 16:37:08

相关推荐

发表回复

登录后才能评论
关注微信