用java写一个订单状态机
时间: 2024-05-13 21:20:06 浏览: 20
好的,以下是一个简单的订单状态机的Java代码实现:
```java
public class OrderStateMachine {
// 订单状态枚举
public enum State {
CREATED,
PAID,
SHIPPED,
DELIVERED,
CANCELLED
}
// 订单事件枚举
public enum Event {
PAYMENT_RECEIVED,
ITEM_SHIPPED,
ITEM_DELIVERED,
ORDER_CANCELLED
}
// 状态转移函数
private static final Map<State, Map<Event, State>> TRANSITIONS = new HashMap<>();
static {
TRANSITIONS.put(State.CREATED, new HashMap<>());
TRANSITIONS.get(State.CREATED).put(Event.PAYMENT_RECEIVED, State.PAID);
TRANSITIONS.get(State.CREATED).put(Event.ORDER_CANCELLED, State.CANCELLED);
TRANSITIONS.put(State.PAID, new HashMap<>());
TRANSITIONS.get(State.PAID).put(Event.ITEM_SHIPPED, State.SHIPPED);
TRANSITIONS.get(State.PAID).put(Event.ORDER_CANCELLED, State.CANCELLED);
TRANSITIONS.put(State.SHIPPED, new HashMap<>());
TRANSITIONS.get(State.SHIPPED).put(Event.ITEM_DELIVERED, State.DELIVERED);
// DELIVERED 和 CANCELLED 状态没有转移函数
}
private State currentState;
public OrderStateMachine() {
this.currentState = State.CREATED;
}
// 触发事件,更新状态
public void trigger(Event event) {
State nextState = TRANSITIONS.get(currentState).get(event);
if (nextState != null) {
currentState = nextState;
}
}
// 获取当前状态
public State getState() {
return currentState;
}
}
```
使用示例:
```java
OrderStateMachine stateMachine = new OrderStateMachine();
System.out.println(stateMachine.getState()); // CREATED
stateMachine.trigger(Event.PAYMENT_RECEIVED);
System.out.println(stateMachine.getState()); // PAID
stateMachine.trigger(Event.ITEM_SHIPPED);
System.out.println(stateMachine.getState()); // SHIPPED
stateMachine.trigger(Event.ITEM_DELIVERED);
System.out.println(stateMachine.getState()); // DELIVERED
stateMachine.trigger(Event.ORDER_CANCELLED);
System.out.println(stateMachine.getState()); // CANCELLED
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)