solon-statemachine [预览]
此插件,由社区成员(王奇奇)贡献
<dependency>
<groupId>org.noear</groupId>
<artifactId>solon-statemachine</artifactId>
</dependency>
1、描述
基础扩展插件,提供为 Solon 状态机的能力。v3.4.3 后支持
2、主要接口
接口 | 说明 |
---|---|
Event | 事件接口 |
State | 状态接口 |
StateContext | 状态上下文 |
StateMachine | 状态机 |
StateTransition | 状态转换器 |
3、应用示例
准备
/**
* 订单事件枚举
*/
public enum OrderEvent implements Event {
CREATE, PAY, SHIP, DELIVER, CANCEL;
}
/**
* 订单状态枚举
*/
public enum OrderState implements State {
NONE,CREATED, PAID, SHIPPED, DELIVERED, CANCELLED;
}
/**
* 订单
*/
public class Order {
}
测试
public class StatemachineTest {
@Test
public void test() {
// 创建状态机实例
StateMachine<OrderState, OrderEvent, Order> stateMachine = new StateMachine<>(OrderState.NONE);
// 无 -> 创建订单
stateMachine.addTransition(new StateTransition<>(OrderState.NONE, OrderState.CREATED, OrderEvent.CREATE,
(order) -> {
Order payload = order.getPayload();
payload.setStatus("已创建");
System.out.println(payload);
}
));
// 创建 -> 支付
stateMachine.addTransition(new StateTransition<>(OrderState.CREATED, OrderState.PAID, OrderEvent.PAY,
(order) -> {
Order payload = order.getPayload();
payload.setStatus("已支付");
System.out.println(payload);
}
));
// 支付 -> 发货
stateMachine.addTransition(new StateTransition<>(OrderState.PAID, OrderState.SHIPPED, OrderEvent.SHIP,
(order) -> {
Order payload = order.getPayload();
payload.setStatus("已发货");
System.out.println(payload);
}
));
// 发货 -> 送达
stateMachine.addTransition(new StateTransition<>(OrderState.SHIPPED, OrderState.DELIVERED, OrderEvent.DELIVER,
(order) -> {
Order payload = order.getPayload();
payload.setStatus("已送达");
System.out.println(payload);
}
));
Order order = new Order("1", "iphone16 pro max", null);
stateMachine.execute(OrderEvent.CREATE, order);
stateMachine.execute(OrderEvent.PAY, order);
stateMachine.execute(OrderEvent.SHIP, order);
stateMachine.execute(OrderEvent.DELIVER, order);
}
}