package com.serliunx.statemanagement.machine; import com.serliunx.statemanagement.manager.BidirectionalStateManager; /** * 状态机定义 *
* 基于双向的状态管理器扩展 {@link BidirectionalStateManager}; * 同时可以监听多种事件和发布事件, 包括: *
* 请使用 {@link StateMachineBuilder} 来构建状态机.
*
* @author SerLiunx
* @version 1.0.0
* @since 2024/12/28
* @see StateMachineBuilder
* @see BidirectionalStateManager
* @see com.serliunx.statemanagement.manager.StateManager
*/
public interface StateMachine extends BidirectionalStateManager, AutoCloseable {
/**
* 切换至下一个状态
*
* @param invokeHandlers 是否唤醒状态处理器
*/
void switchNext(boolean invokeHandlers);
/**
* 返回并切换至下一个状态
*
* @param invokeHandlers 是否唤醒状态处理器
* @return 切换前的状态
*/
S getAndSwitchNext(boolean invokeHandlers);
/**
* 切换至下一个状态并返回切换后的状态
*
* @param invokeHandlers 是否唤醒状态处理器
* @return 切换后的状态
*/
S switchNextAndGet(boolean invokeHandlers);
/**
* 切换至上一个状态
*
* @param invokeHandlers 是否唤醒状态处理器
*/
void switchPrev(boolean invokeHandlers);
/**
* 获取当前状态并切换至上一个状态
*
* @param invokeHandlers 是否唤醒状态处理器
* @return 切换前的状态
*/
S getAndSwitchPrev(boolean invokeHandlers);
/**
* 切换至上一个状态并返回切换后的状态
*
* @param invokeHandlers 是否唤醒状态处理器
* @return 切换后的状态
*/
S switchPrevAndGet(boolean invokeHandlers);
/**
* 重置回默认状态, 一般为状态集合中的第一个
*
* @param invokeHandlers 是否唤醒状态处理器
*/
void reset(boolean invokeHandlers);
/**
* 切换至指定状态
*