作者:不喜欢基于事件的状态机实现,因此我创建了一个类型化、函数式、简单且直接的状态机库。点击标题
安装:
<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
}
}