“地震倒计时”是如何做到的?遇地震自救时,到底是躲还是逃?_当前要闻
2023-06-25 22:24:36
(资料图)
状态机,包括了状态和动作,某个状态下,只能执行某些动作,如果动作不匹配,状态是不会进行变更了,这样就保护了我们状态字段的准备性,不能随意改变,必须按着我们设计的规则进行状态的轮转。
import com.github.oxo42.stateless4j.StateMachine;import com.github.oxo42.stateless4j.StateMachineConfig;import com.github.oxo42.stateless4j.transitions.Transition;public class StateMachineExample {enum State {/** * 表示电话机已经从底座拿起,但用户还没有拨打或者接听电话,此时电话处于空闲状态 */OFF_HOOK,/** * 响铃 */RINGING,/** * 连接 */CONNECTED,/** * 表示通话的一方需要暂时挂起通话 */ON_HOLD}enum Trigger {/** * 用户拨打电话并等待接听 */CALL_DIALED,/** * 表示通话结束后挂断电话 */HUNG_UP,/** * 表示接听方接通电话,此时双方正常通话。 */CALL_CONNECTED,/** * 表示通话的一方需要暂时挂起通话 */PLACED_ON_HOLD,/** * 表示恢复保持状态执行通话【与PLACED_ON_HOLD对应】 */TAKEN_OFF_HOLD,/** * 留言 */LEFT_MESSAGE,/** * 表示通话的一方结束通话并停止使用电话 */STOP_USING_PHONE} public static void main(String[] args) { // 创建状态机配置 StateMachineConfig config = new StateMachineConfig<>(); // 定义状态转换规则 config.configure(State.OFF_HOOK) .permit(Trigger.CALL_DIALED, State.RINGING); config.configure(State.RINGING) .permit(Trigger.HUNG_UP, State.OFF_HOOK) .permit(Trigger.CALL_CONNECTED, State.CONNECTED); config.configure(State.CONNECTED) .permit(Trigger.LEFT_MESSAGE, State.OFF_HOOK) .permit(Trigger.HUNG_UP, State.OFF_HOOK) .permit(Trigger.PLACED_ON_HOLD, State.ON_HOLD); config.configure(State.ON_HOLD) .permit(Trigger.TAKEN_OFF_HOLD, State.CONNECTED) .permit(Trigger.HUNG_UP, State.OFF_HOOK); // 创建状态机实例 StateMachine stateMachine = new StateMachine<>(State.OFF_HOOK, config); // 执行状态转换 stateMachine.fire(Trigger.CALL_DIALED); stateMachine.fire(Trigger.CALL_CONNECTED); stateMachine.fire(Trigger.PLACED_ON_HOLD); stateMachine.fire(Trigger.TAKEN_OFF_HOLD); stateMachine.fire(Trigger.HUNG_UP); // 获取当前状态 State currentState = stateMachine.getState(); System.out.println("Current State: " + currentState); }}
在上面的示例中,我们使用 StateMachine
类创建了一个状态机,并定义了状态(State
)和触发器(Trigger
)。通过配置状态转换规则,我们可以使用 fire()
方法触发状态转换。最后,我们获取当前状态并输出。
关键词:
关于本站 管理团队 版权申明 网站地图 联系合作 招聘信息
Copyright © 2005-2023 创投网 - www.xunjk.com All rights reserved
联系我们:39 60 29 14 2@qq.com
皖ICP备2022009963号-3