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

Solon StateMachine 实现状态机使用示例详解

什么是状态机

状态机是计算机科学中的核心建模工具,用于描述对象在其生命周期内状态变化的逻辑模型。它通过定义有限状态集合状态转移规则触发事件,精确控制系统的行为逻辑。

Solon StateMachine 是 Solon Framework 提供的一个功能强大的状态机框架,可实现复杂的工作流、订单管理等需要状态流转的场景。通过对状态、事件和转移的管理,开发者能够构建出简洁而灵活的状态机逻辑。

使用示例

1、导入maven依赖

<dependency><groupId>org.noear</groupId><artifactId>solon-statemachine</artifactId><version>3.5.0</version>
</dependency>

2、创建订单状态枚举类

import org.noear.solon.statemachine.State;public enum OrderStatus implements State{WAITING_PAYMENT,//待支付WAITING_RECEIVE,//待取货FINISHED,//已完成CANCELED;//已取消
}

3、创建订单转悠事件枚举类

import org.noear.solon.statemachine.Event;public enum OrderEvent implements Event {CREATE_ORDER,//创建订单PAY_ORDER,//支付订单RECEIVE_ORDER,//取货CANCEL_ORDER,//取消订单FINISH_ORDER//完成订单
}

4、创建订单实体,并实现 EventContext 接口(也可以不实现,改用 EventContext.of(...))

public class Order implements EventContext<OrderStatus, Order> {private final String orderId;private OrderStatus status;public Order(String orderId, OrderStatus status) {this.orderId = orderId;this.status = status;}public String getOrderId() {return orderId;}public OrderStatus getStatus() {return status;}public void setStatus(OrderStatus status) {this.status = status;}// for EventContext@Overridepublic OrderStatus getCurrentState() {return status;}@Overridepublic Order getPayload() {return this;}
}

5、定义订单状态机组件,并添加状态转移规则。这里是重点了

Solon StateMachine 不管理当前状态,不涉及持久化。具有可复用、多线程安全特性。

import org.noear.solon.annotation.Managed;
import org.noear.solon.statemachine.StateMachine;@Managed
public class OrderStateMachine extends StateMachine<OrderStatus, OrderEvent,Order> {public OrderStateMachine() {// 订单待支付 -> 待取货addTransition(t -> t.from(OrderStatus.WAITING_PAYMENT).to(OrderStatus.WAITING_RECEIVE).on(OrderEvent.PAY_ORDER).then(c -> c.getPayload().setStatus(c.getTo())));// 订单待取货 -> 已完成addTransition(t -> t.from(OrderStatus.WAITING_RECEIVE).to(OrderStatus.FINISHED).on(OrderEvent.FINISH_ORDER).then(c -> c.getPayload().setStatus(c.getTo())));// 订单待支付 -> 已取消addTransition(t -> t.from(OrderStatus.WAITING_PAYMENT).to(OrderStatus.CANCELED).on(OrderEvent.CANCEL_ORDER).then(c -> c.getPayload().setStatus(c.getTo())));}
}

6、创建调用示例服务

Solon StateMachine 在发送事件时,通过 EventContext 传递当前状态和装载。

@Managed
public class OrderService {@Injectprivate OrderStateMachine orderStateMachine;//支付public Order pay() {Order order = new Order("1", OrderStatus.WAITING_RECEIVE);System.out.println("尝试支付,订单号:" + order.getOrderId());try {//事件: 支付, 状态转换:待支付 → 待发货orderStateMachine.sendEvent(OrderEvent.PAY_ORDER, order);System.out.println("支付成功,订单号:" + order.getOrderId());} catch (Exception ex) {System.out.println("支付失败, 状态异常,订单号:" + order.getOrderId());}return order;}
}
http://www.sczhlp.com/news/33536/

相关文章:

  • 人工智能大模型 基础知识汇总
  • 最新疫情通报上海抖音seo
  • p2p网站开发价格惠州百度seo
  • 服务器做jsp网站教程视频教程147seo工具
  • 成都网站建设 培训英文seo推广
  • 网站的想法百度商家入驻
  • wordpress閱讀主题优化大师使用心得
  • 广东省石油化工建设集团公司网站友情链接多少钱一个
  • 做网站优化推广多少钱北京网络seo
  • 网站注销怎么做消北京搜索引擎优化经理
  • 三只松鼠广告策划书优化方案怎么写
  • 温州哪里有做网站济南做seo排名
  • 哪个网站做数学题赚钱关键词推广排名
  • 如何做网站大图片搜索引擎优化与关键词的关系
  • 南宁庄关键词推广优化方案seo基础培训
  • 哪个网站可以做兼职讲师百度seo效果
  • FM, FFM
  • Proxmox9.0直通显卡配置 (一)
  • 电子商城建设seo优化外链平台
  • 公司做网站流程流程百度云
  • 留坝政府网站建设宁德市是哪个省
  • php网站用什么软件佛山seo教程
  • 通州网站网站建设推广放单平台
  • 服装电子商务网站建设博客网站登录入口
  • 青岛网站定做简单的网页设计作品
  • 任丘网站开发建设怎么选2023上海又出现疫情了
  • 服装电子商务网站建设过程与实现seo广州工作好吗
  • 厦门网站建设优化企业产品推广方案模板
  • 做网站首页推广文章的注意事项
  • 网站建设营销词西安网站建设平台