feat: 状态机现可提供初始化状态.

This commit is contained in:
2025-03-27 11:32:20 +08:00
parent 5d73a20428
commit f0db621968
7 changed files with 85 additions and 53 deletions

View File

@@ -6,7 +6,6 @@ import com.serliunx.statemanagement.machine.handler.StateHandlerWrapper;
import com.serliunx.statemanagement.manager.AbstractStateManager;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.TimeUnit;
@@ -29,22 +28,15 @@ public abstract class AbstractStateMachine<S> extends AbstractStateManager<S> im
/**
* 默认的构造函数
*
* @param entryHandlers 进入事件处理器集合
* @param leaveHandlers 离开事件处理器集合
* @param exchangeHandlers 交换事件处理器集合
* @param executor 异步执行器
* @param async 是否异步执行
* @param stateList 状态列表
* @param context 状态机上下文
*/
AbstractStateMachine(List<S> stateList,
Map<S, List<StateHandlerWrapper<S>>> entryHandlers,
Map<S, List<StateHandlerWrapper<S>>> leaveHandlers,
Map<String, List<StateHandlerWrapper<S>>> exchangeHandlers,
Map<Object, List<Consumer<StateMachine<S>>>> eventRegistries,
Executor executor,
Boolean async
) {
public AbstractStateMachine(List<S> stateList, StateMachineContext<S> context) {
super(stateList);
context = new StateMachineContext<>(entryHandlers, leaveHandlers, exchangeHandlers, eventRegistries, executor, async);
this.context = context;
// 设置初始状态
tryInitialState();
}
@Override
@@ -303,4 +295,13 @@ public abstract class AbstractStateMachine<S> extends AbstractStateManager<S> im
stateHandler.handle(params);
});
}
/**
* 尝试设置初始状态(如果有指定的话)
*/
private void tryInitialState() {
if (context.initialState != null) {
switchTo(context.initialState, false);
}
}
}