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

当代码中出现大量 if-else 或 switch-case 判断,尤其是根据不同类型执行不同逻辑时,代码会变得难以维护和扩展。策略模式能有效解耦条件判断与具体行为,使系统更灵活、可扩展。
以下情况适合使用策略模式:
例如:订单根据支付方式(微信、支付宝、银联)执行不同处理逻辑,若用 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);
基本上就这些。通过策略模式,原本分散的条件判断被集中到工厂中,业务逻辑清晰,新增策略无需改动核心代码,符合开闭原则。关键是把“变”与“不变”分离,让系统更容易应对未来变化。
以上就是如何运用策略模式优化复杂的条件判断逻辑?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号