简单易用的状态机库
用了几个状态机的库,感觉需要配置的东西太多了,功能让我有点眼花缭乱,感觉实际生产环境中还是有很多情况不需要用到那么复杂的状态机管理系统,比如登录流程,注册流程,等等,所以特地写了一个小小的状态机库,实现以最快的方法搭建起一个状态机。希望各路大佬能提点意见。
源码地址:https://github.com/weilueluo/tsm4j
例子
首先定义一些状态:
private static class MyState {
public static final State<Void> HUNGRY = State.create();
public static final State<Void> NO_FOOD = State.create();
public static final State<Void> FOOD_IS_NOT_READY = State.create();
public static final State<Void> MAKE_FOOD = State.create();
public static final State<Void> FOOD_IS_READY = State.create();
public static final State<Void> NOT_HUNGRY = State.create();
public static final State<Integer> ATTEMPTS = State.create();
}
然后定义一些过渡的函数就能跑起来了。
StateMachine stateMachine = StateMachineBuilder.newInstance()
.addTransition(setOf(MyState.HUNGRY, MyState.NO_FOOD), context -> context.send(MyState.MAKE_FOOD))
.addTransition(MyState.MAKE_FOOD, context -> {
Supplier<Boolean> tryMakeFood = () -> true;
if (tryMakeFood.get()) {
context.send(MyState.FOOD_IS_READY);
} else {
context.send(MyState.FOOD_IS_NOT_READY);
}
})
.addTransition(setOf(MyState.HUNGRY, MyState.FOOD_IS_READY), context -> context.send(MyState.NOT_HUNGRY))
.build();
assertTrue(stateMachine.send(setOf(MyState.HUNGRY, MyState.NO_FOOD)).hasReached(MyState.NOT_HUNGRY));
大伙觉得怎么样