1. 前言
在设计模式专栏中,介绍过一个状态模式,并以交通信号灯的实现进行状态模式的演示讲解,实际上状态模式也特别适合处理那些包含大量条件语句(如 if-else 或 switch)的复杂状态转换逻辑。

为什么使用状态模式消除 if-else?
在日常 Java 开发中,我们常常遇到这样的情况:
- 不同的状态有不同的处理逻辑
- 状态之间会相互切换
- 不同状态下执行的动作可能完全不同
这时,如果我们用 if-else 或 switch-case 来写,代码很容易变得臃肿难维护:比如下面代码
if(status == 0){ // 待支付逻辑
} else if(status == 1){ // 已支付逻辑
} else if(status == 2){ // 已发货逻辑
} else if(status == 3){ // 已收货逻辑
}
这种写法的问题: 逻辑分支多,扩展性差 新增状态时,需要修改原有代码(违反开闭原则) 状态切换逻辑容易分散在各个 if-else 中,不够集中
那么使用状态机(State Machine)也可称状态模式,就可以解决上述这些问题,并具备以下优点:
- 消除复杂的条件判断语句
- 提高代码可读性和可维护性
- 使状态转换逻辑更加清晰
- 符合开闭原则,易于扩展新状态
2. 复现传统 if-else 实现的业务场景问题
假设有一个电商订单系统,订单状态有:
- 待支付(PendingPay)
- 已支付(Paid)
- 已发货(Shipped)
- 已完成(Completed)
订单可以: 从待支付 → 支付 → 发货 → 完成 取消订单(在待支付状态下)
那么可能你的代码就是像这样的:
public class OrderServiceIfElse {
{
(status == ) {
(.equals(action)) {
System.out.println();
} (.equals(action)) {
System.out.println();
}
} (status == ) {
(.equals(action)) {
System.out.println();
}
} (status == ) {
(.equals(action)) {
System.out.println();
}
}
}
}


