中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

springboot~stateless4j實(shi)現狀態機

狀態機,包括了狀態和動作,某個狀態下,只能執行某些動作,如果動作不匹配,狀態是不會進行變更了,這樣就保護了我們狀態字段的準備性,不能隨意改變,必須按著我們設計的規則進行狀態的輪轉。

Stateless實現的狀態機

  1. Stateless:Stateless 是一個簡單且易于使用的狀態機庫,它提供了基本的狀態轉換和動作執行功能。以下是一個使用 Stateless 實現的簡單狀態機示例:
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<State, Trigger> 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<State, Trigger> 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() 方法觸發(fa)狀態(tai)轉換。最后,我(wo)們(men)獲取當前狀態(tai)并輸出。

posted @ 2023-06-25 16:07  張占嶺  閱讀(804)  評論(0)    收藏  舉報