Java的类型化状态机


作者:不喜欢基于事件的状态机实现,因此我创建了一个类型化、函数式、简单且直接的状态机库。点击标题

安装:

<dependency>
    <groupId>com.tsm4j</groupId>
    <artifactId>tsm4j</artifactId>
    <version>0.0.3</version>
</dependency>


public class Demo {
    public void demo() {
        // 创建一个状态机生成器,输入为整数,输出为字符串,命名为 demo
        StateMachineBuilder<Integer, String> builder = StateMachineBuilder.create("demo");

        // 定义状态
        // s1 具有整数输入,名称为 "int 1"
        State<Integer> s1 = builder.newTransitionState("int 1");
        // s2 具有名为 "int 2 "的整数输入值
        State<Integer> s2 = builder.newTransitionState("int 2");
        //s3 的字符串输入名为 "str"。
        // 它是一个输出状态,因此到达该状态的任何值都被视为输出值
        State<String> s3 = builder.newOutputState("str");

        // 定义转换
        // state1 ----> state2 ----> state3 (转为字符串)
        builder.addTransition(s1, i -> s2.of(i * 2));
        builder.addTransition(s2, i -> {
            if (i > 5) {
                return s3.of(String.valueOf(i + 1));
            } else {
                return s3.of(String.valueOf(i * 3));
            }
        });

        StateMachine<Integer, String> stateMachine = builder.build();

        //从状态 1 触发状态机
        assertEquals("6", stateMachine.run(s1.of(1)).getOutputs().get(0));  // 1 * 2 * 3 = 6

        //从状态 1 触发状态机
        assertEquals("7", stateMachine.run(s2.of(6)).getOutputs().get(0));  // 6 + 1 = 7
    }
}