Files
state-management/src/main/java/com/serliunx/statemanagement/machine/StateEventRegistry.java

112 lines
3.5 KiB
Java

package com.serliunx.statemanagement.machine;
import com.serliunx.statemanagement.machine.external.FlexibleStateMachine;
import com.serliunx.statemanagement.machine.handler.StateHandler;
import java.util.concurrent.Executor;
/**
* 状态机之状态事件注册
* <li> 注册状态切换时的事件, 一般用于状态机构建和支持动态调整的状态机{@link FlexibleStateMachine};
* 当然实际不仅于此, 任何相关的都可以使用.
*
* @author <a href="mailto:serliunx@yeah.net">SerLiunx</a>
* @since 2025/3/28
* @see FlexibleStateMachine
*/
public interface StateEventRegistry<S> {
/**
* 添加进入事件
* <li> 切换到了指定状态时执行的逻辑
*
* @param state 状态
* @param handler 处理逻辑
* @param async 是否异步执行
* @param executor 异步执行器, 异步执行时将使用, 不指定时将使用状态机内置的执行器
*/
StateEventRegistry<S> whenEntry(S state, StateHandler<S> handler, Boolean async, Executor executor);
/**
* 添加进入事件
* <li> 切换到了指定状态时执行的逻辑
*
* @param state 状态
* @param handler 处理逻辑
* @param async 是否异步执行
*/
StateEventRegistry<S> whenEntry(S state, StateHandler<S> handler, Boolean async);
/**
* 添加进入事件
* <li> 切换到了指定状态时执行的逻辑
*
* @param state 状态
* @param handler 处理逻辑
*/
StateEventRegistry<S> whenEntry(S state, StateHandler<S> handler);
/**
* 添加离开事件
* <li> 从指定状态切换到别的状态时执行的逻辑
*
* @param state 状态
* @param handler 处理逻辑
* @param async 是否异步执行
* @param executor 异步执行器, 异步执行时将使用, 不指定时将使用状态机内置的执行器
*/
StateEventRegistry<S> whenLeave(S state, StateHandler<S> handler, Boolean async, Executor executor);
/**
* 添加离开事件
* <li> 从指定状态切换到别的状态时执行的逻辑
*
* @param state 状态
* @param handler 处理逻辑
* @param async 是否异步执行
*/
StateEventRegistry<S> whenLeave(S state, StateHandler<S> handler, Boolean async);
/**
* 添加离开事件
* <li> 从指定状态切换到别的状态时执行的逻辑
*
* @param state 状态
* @param handler 处理逻辑
*/
StateEventRegistry<S> whenLeave(S state, StateHandler<S> handler);
/**
* 添加交换事件
* <li> 从A状态切换至B状态时触发
*
* @param from 源状态
* @param to 目的状态
* @param handler 处理器
* @param async 是否异步执行
* @param executor 异步执行器, 异步执行时将使用, 不指定时将使用状态机内置的执行器
*/
StateEventRegistry<S> exchange(S from, S to, StateHandler<S> handler, Boolean async, Executor executor);
/**
* 添加交换事件
* <li> 从A状态切换至B状态时触发
*
* @param from 源状态
* @param to 目的状态
* @param handler 处理器
* @param async 是否异步执行
*/
StateEventRegistry<S> exchange(S from, S to, StateHandler<S> handler, Boolean async);
/**
* 添加交换事件
* <li> 从A状态切换至B状态时触发
*
* @param from 源状态
* @param to 目的状态
* @param handler 处理器
*/
StateEventRegistry<S> exchange(S from, S to, StateHandler<S> handler);
}