java轻量级有限状态机
使用例子
//1.定义状态节点
StateImpl startState=new StateImpl("起始", StateType.Start);
StateImpl isNewUser=new StateImpl("新用户",StateType.Middle);
StateImpl isOldUser=new StateImpl("老用户",StateType.Middle);
StateImpl scoreNotEnought=new StateImpl("积分不足",StateType.End);
StateImpl scoreEnought=new StateImpl("积分足够",StateType.Middle);
StateImpl ok=new StateImpl("参与",StateType.End);
StateImpl failed=new StateImpl("不参与",StateType.End);
//2. 定义状态图
//起始状态 输入 活动是否关闭 转移到 失败、起始状态
startState.input(InFunc.newFuncWithParamLong("检查活动是否关闭",UsageExample::activityClosed)).transferTo(failed,startState);
//起始状态 输入 检查是新用户老用户 转移到 新用户状态、老用户状态
startState.input(InFunc.newFuncWithParamLong("查询新老会员",UsageExample::checkIsItNewOrOldUser)).transferTo(isNewUser,isOldUser);
//老用户状态 输入 检查积分是否足够 转移到 积分不够状态、积分足够状态
isOldUser.input(InFunc.newFunc("查询积分是否足够",UsageExample::scoreEnought)).transferTo(scoreNotEnought,scoreEnought);
//积分足够专改 输入 扣减积分 转移到 成功、失败状态
scoreEnought.input(InFunc.newFunc("扣减积分",UsageExample::scoreExchange)).transferTo(ok,failed);
StateMachine machine=new StateMachine(startState);
//3. 喂给状态图
machine.feedInFuncs(activityId,userId);
machine.feedInFuncs(userQueryDto);
machine.feedInFuncs(exchangeDto);
运行结果:
(Start[起始])-----检查活动是否关闭---->(Start[起始])
(Start[起始])-----查询新老会员---->(Middle[老用户])
(Middle[老用户])-----查询积分是否足够---->(Middle[积分足够])
(Middle[积分足够])-----扣减积分---->(End[参与])