当前位置: 首页 > news >正文

枚举策略模式实战:优雅消除支付场景的if-else

在支付场景中使用枚举实现策略模式,可以优雅地消除if-else语句,提高代码的可读性、可维护性和扩展性。以下是具体实现方案:

1. 定义策略枚举

@Getter
@RequiredArgsConstructor
public enum PaymentStrategy {ALIPAY(1, "支付宝") {@Overridepublic void processPayment(BigDecimal amount) {System.out.println("支付宝支付: " + amount + "元");// 调用支付宝SDK的具体逻辑}},WECHAT_PAY(2, "微信支付") {@Overridepublic void processPayment(BigDecimal amount) {System.out.println("微信支付: " + amount + "元");// 调用微信支付SDK的具体逻辑}},CREDIT_CARD(3, "信用卡支付") {@Overridepublic void processPayment(BigDecimal amount) {System.out.println("信用卡支付: " + amount + "元");// 调用银行API的逻辑}};/*** 编码*/private final Integer code;/*** 说明*/private final String desc;/*** 抽象支付方法(策略接口)* @param amount 支付金额*/public abstract void processPayment(BigDecimal amount);
}

2. 上下文处理器(消除 if-else)

public class PaymentProcessor {public void executePayment(String paymentType, BigDecimal amount) {// 通过枚举名直接获取策略(无需条件判断)PaymentStrategy strategy = PaymentStrategy.valueOf(paymentType.toUpperCase());strategy.processPayment(amount);}
}

3. 客户端调用

public class Client {public static void main(String[] args) {PaymentProcessor processor = new PaymentProcessor();// 直接通过支付类型字符串调用(无if-else)processor.executePayment("ALIPAY", new BigDecimal("100.50"));processor.executePayment("WECHAT_PAY", new BigDecimal("200.00"));}
}

优势分析

  1. 消除条件判断

    • 直接通过valueOf()将字符串映射到枚举策略,彻底消除if-else/switch

  2. 开闭原则

    // 扩展新支付方式只需添加枚举常量
    PaymentStrategy.BANK_TRANSFER {@Overridepublic void processPayment(BigDecimal amount) {System.out.println("银行转账: " + amount);}
    };

    新增策略时 无需修改已有代码,符合开放-封闭原则

  3. 强类型约束

    • 编译器会强制要求每个枚举实现策略方法

    • 避免字符串拼写错误(IllegalArgumentException

  4. 策略集中管理

    • 所有策略在枚举中一目了然

    • 天然的单例保证(无需考虑线程安全问题)

处理非法支付类型

public void executePayment(String paymentType, BigDecimal amount) {try {PaymentStrategy strategy = PaymentStrategy.valueOf(paymentType.toUpperCase());strategy.processPayment(amount);} catch (IllegalArgumentException e) {// 统一处理未知支付类型throw new UnsupportedPaymentTypeException("不支持的支付方式: " + paymentType);}
}

适用场景

  • 策略类型固定且有限(如支付方式、状态机)

  • 需要强类型约束和编译期检查

  • 策略本身无需复杂状态维护

对比传统工厂模式:枚举策略模式更简洁,但扩展性略低于类层次结构实现。适合策略数量可控的场景,若策略行为过于复杂或需要动态加载,建议采用传统接口+实现类的方式。

http://www.dtcms.com/a/301979.html

相关文章:

  • 6种将iPhone照片传输到Windows 10电脑的方法
  • Vue 正在热映模块
  • 安宝特案例丨AR+AI+SOP?3大技术融合革新军工航天领域
  • 组件化(一):重新思考“组件”:状态、视图和逻辑的“最佳”分离实践
  • 中兴云电脑W101D2-晶晨S905L3A-2G+8G-安卓9-线刷固件包
  • react前端样式如何给元素设置高度自适应
  • 四、计算机组成原理——第7章:输入/输出系统
  • Mac查看本机ip地址
  • 六轴机械臂cad【11张】三维图+设计说明书
  • GPU训练日志 (下)
  • Redis 服务挂掉排查与解决
  • STL学习(?、set容器)
  • 计算机毕业设计java在线二手系统的设计与实现 基于Java的在线二手交易平台开发 Java技术驱动的二手物品管理系统
  • 如何创建 Google 翻译桌面快捷方式
  • qt 心跳包
  • 【Linux篇】进程间通信:进程IPC
  • 搜索引擎高级搜索指令大全(Google、百度等浏览器通用)
  • R语言简介(附电子书资料)
  • 【kafka】消息队列
  • 深入Go并发编程:Channel、Goroutine与Select的协同艺术
  • Java BigDecimal详解:小数精确计算、使用方法与常见问题解决方案
  • 生产力效能跃升 金士顿DDR5 5600内存
  • 【正序拆解整数】2022-9-18
  • 二、Linux文本处理与文件操作核心命令
  • 群晖Synology Drive:打造高效安全的私有云协作平台
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 微博文章数据可视化分析-点赞区间实现
  • 持续集成CI与自动化测试
  • 越野新王豹 5:以极致可靠性诠释“安全是最大的豪华”
  • 【免费可用】【提供源代码】对YOLOV11模型进行剪枝和蒸馏
  • Excel常用函数大全,非常实用