java枚举天然适合实现策略模式,通过声明抽象方法并由各常量实现、提供静态查找工厂、封装字段数据、实现统一接口等方式,替代if-else,提升可读性、可维护性与扩展性。

Java 枚举天然适合实现策略模式,能有效替代冗长的 if-else 或 switch,让代码更清晰、可维护、易扩展。
枚举自带行为:每个常量定义自己的逻辑
枚举类可以声明抽象方法,并让每个枚举常量在花括号中提供具体实现。这样,调用时无需条件判断,直接委托给对应实例即可。
- 定义枚举时声明一个公共方法(如 execute()),并设为 abstract
- 每个枚举值(如 PAYPAL、ALIPAY)后跟大括号,内部实现该方法
- 客户端直接调用 payType.execute(input),完全解耦判断逻辑
统一入口 + 枚举工厂:按类型获取策略
如果策略需要动态选择(比如根据字符串参数决定用哪个枚举),可在枚举中添加静态查找方法,避免外部用 if-else 匹配。
- 在枚举中定义 public static PayType from(String code)
- 内部用 Map 或数组预加载映射关系,提升查找效率
- 调用方只写 PayType.from("alipay").execute(order),不再出现分支语句
支持状态与数据:枚举字段封装上下文
枚举常量可持有私有字段(如费率、渠道 ID、回调地址),把策略相关的配置和行为一起封装,避免额外策略类或配置类。
- 构造器传入参数(ALIPAY(0.01, "https://api.alipay.com"))
- 提供 getter 方法供 execute() 内部使用
- 业务逻辑和元数据合并在一处,降低出错概率
配合接口增强灵活性:枚举实现策略接口
当策略行为较复杂,或未来可能引入非枚举实现(如运行时加载的插件策略),可让枚举实现统一接口。
- 定义 interface PaymentStrategy,含 execute()、support() 等方法
- 枚举 implements 该接口,同时保留自身常量语义
- 服务类依赖接口而非枚举,便于后续替换或 mock 测试
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











