首页 > 网络 > 网络热点

管理订单状态,该上状态机吗?

常驻编辑 网络热点 2022-06-05 连贯   状态   嵌套   状态机   线程   订单   接口   原理   代码   方法   项目
5zq拜客生活常识网

下图展示了COLA状态机的源代码目录,可以看到非常的简洁。5zq拜客生活常识网

5zq拜客生活常识网

1. 连贯接口 Fluent Interfaces

COLA状态机的定义使用了连贯接口Fluent Interfaces,连贯接口的一个重要作用是,限定方法调用的顺序。比如,在构建状态机的时候,我们只有在调用了from方法后,才能调用to方法,Builder模式没有这个功能。5zq拜客生活常识网

下图中可以看到,我们在使用的时候是被严格限制的:5zq拜客生活常识网

5zq拜客生活常识网

StateMachineBuilder builder = StateMachineBuilderFactory.create();
        builder.externalTransition()
                .from(States.STATE1)
                .to(States.STATE2)
                .on(Events.EVENT1)
                .when(checkCondition())
                .perform(doAction());

这是如何实现的?其实是使用了Java接口来实现。5zq拜客生活常识网

5zq拜客生活常识网

2. 状态机注册和触发原理

这里简单梳理一下状态机的注册和触发原理。5zq拜客生活常识网

用户执行如下代码来创建一个状态机,指定一个MACHINE_ID:5zq拜客生活常识网

StateMachine stateMachine = builder.build(MACHINE_ID);

COLA会将该状态机在StateMachineFactory类中,放入一个ConcurrentHashMap,以状态机名为key注册。5zq拜客生活常识网

static Map stateMachineMap = new ConcurrentHashMap<>();

注册好后,用户便可以使用状态机,通过类似下方的代码触发状态机的状态流转:5zq拜客生活常识网

stateMachine.fireEvent(StateMachineTest.States.STATE1, StateMachineTest.Events.EVENT1, new Context("1"));

内部实现如下:5zq拜客生活常识网

5zq拜客生活常识网

  1. 首先判断COLA状态机整个组件是否初始化完成。
  2. 通过routeTransition寻找是否有符合条件的状态流转。
  3. transition.transit执行状态流转。

transition.transit方法中:5zq拜客生活常识网

5zq拜客生活常识网

检查本次流转是否符合condition,符合,则执行对应的action。5zq拜客生活常识网

COLA状态机实战

**PS:以下实战代码取自COLA官方仓库测试类5zq拜客生活常识网

一、状态流转使用示例

  1. 从单一状态流转到另一个状态
@Test
public void testExternalNormal(){
    StateMachineBuilder builder = StateMachineBuilderFactory.create();
    builder.externalTransition()
            .from(States.STATE1)
            .to(States.STATE2)
            .on(Events.EVENT1)
            .when(checkCondition())
            .perform(doAction());

    StateMachine    

相关阅读:

  • 尤伯杯陈雨菲开门红,何冰娇三局险胜,中国队横扫印尼进四
  • 当前正在热播的六部剧,《破事精英》排第三,你在追哪一部
  • 女孩醉心武侠,自导自演成一派,这表演看着过瘾
  • 第74集团军某旅组织侦察专业跨昼夜连贯考核——大雨未
  • A股,或将迎来一次大洗牌
  • 第74集团军某旅组织侦察专业跨昼夜连贯考核
  • 陪你笑,看你闹
  • 酒局小游戏,无道具(3.0)
  • 西媒:超仿真机器人能表达感情
  • 8868体育:快速崩盘,诺丁汉四连败
    • 网站地图 |
    • 声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。文章内容仅供参考,不做权威认证,如若验证其真实性,请咨询相关权威专业人士。