外交部發(fā)言人就瓦格納集團(tuán)事件答記者問 新視野
2023-06-26 02:20:40
(資料圖片僅供參考)
狀態(tài)機(jī),包括了狀態(tài)和動(dòng)作,某個(gè)狀態(tài)下,只能執(zhí)行某些動(dòng)作,如果動(dòng)作不匹配,狀態(tài)是不會(huì)進(jìn)行變更了,這樣就保護(hù)了我們狀態(tài)字段的準(zhǔn)備性,不能隨意改變,必須按著我們設(shè)計(jì)的規(guī)則進(jìn)行狀態(tài)的輪轉(zhuǎn)。
import com.github.oxo42.stateless4j.StateMachine;import com.github.oxo42.stateless4j.StateMachineConfig;import com.github.oxo42.stateless4j.transitions.Transition;public class StateMachineExample {enum State {/** * 表示電話機(jī)已經(jīng)從底座拿起,但用戶還沒有撥打或者接聽電話,此時(shí)電話處于空閑狀態(tài) */OFF_HOOK,/** * 響鈴 */RINGING,/** * 連接 */CONNECTED,/** * 表示通話的一方需要暫時(shí)掛起通話 */ON_HOLD}enum Trigger {/** * 用戶撥打電話并等待接聽 */CALL_DIALED,/** * 表示通話結(jié)束后掛斷電話 */HUNG_UP,/** * 表示接聽方接通電話,此時(shí)雙方正常通話。 */CALL_CONNECTED,/** * 表示通話的一方需要暫時(shí)掛起通話 */PLACED_ON_HOLD,/** * 表示恢復(fù)保持狀態(tài)執(zhí)行通話【與PLACED_ON_HOLD對(duì)應(yīng)】 */TAKEN_OFF_HOLD,/** * 留言 */LEFT_MESSAGE,/** * 表示通話的一方結(jié)束通話并停止使用電話 */STOP_USING_PHONE} public static void main(String[] args) { // 創(chuàng)建狀態(tài)機(jī)配置 StateMachineConfig config = new StateMachineConfig<>(); // 定義狀態(tài)轉(zhuǎn)換規(guī)則 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); // 創(chuàng)建狀態(tài)機(jī)實(shí)例 StateMachine stateMachine = new StateMachine<>(State.OFF_HOOK, config); // 執(zhí)行狀態(tài)轉(zhuǎn)換 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); // 獲取當(dāng)前狀態(tài) State currentState = stateMachine.getState(); System.out.println("Current State: " + currentState); }}
在上面的示例中,我們使用 StateMachine
類創(chuàng)建了一個(gè)狀態(tài)機(jī),并定義了狀態(tài)(State
)和觸發(fā)器(Trigger
)。通過配置狀態(tài)轉(zhuǎn)換規(guī)則,我們可以使用 fire()
方法觸發(fā)狀態(tài)轉(zhuǎn)換。最后,我們獲取當(dāng)前狀態(tài)并輸出。
關(guān)鍵詞:
關(guān)于本站 管理團(tuán)隊(duì) 版權(quán)申明 網(wǎng)站地圖 聯(lián)系合作 招聘信息
Copyright © 2005-2023 創(chuàng)投網(wǎng) - www.ossf.org.cn All rights reserved
聯(lián)系我們:39 60 29 14 2@qq.com
皖I(lǐng)CP備2022009963號(hào)-3