您好,登錄后才能下訂單哦!
這篇文章主要講解了“squirrel-foundation有限狀態機的詳細介紹”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“squirrel-foundation有限狀態機的詳細介紹”吧!
有限狀態機:是一種用來進行對象行為建模的工具,其作用主要是描述對象在它的生命周期內所經歷的狀態序列,以及如何響應來自外界的各種事件。在計算機科學中,有限狀態機被廣泛用于建模應用行為、硬件電路系統設計、軟件工程,編譯器、網絡協議、和計算與語言的研究
本文主要學習java的一個開源實現 squirrel-foundation 狀態機
1 | 現態、條件、動作、次態。“現態”和“條件”是因,“動作”和“次態”是果 |
一般來說,隨著項目的發展,代碼變得越來越復雜,狀態之間的關系,轉化變得越來越復雜,比如訂單系統狀態,活動系統狀態等。產品或者開發很難有一個人能夠梳理清楚整個狀態的全局. 使用狀態機來管理對象生命周期可以使得代碼具有更好的可讀性,可維護性,以及可測試性。
1 | 有限狀態機是一種對象行為建模工具,適用對象有一個明確并且復雜的生命流(一般而言三個以上狀態),并且在狀態變遷存在不同的觸發條件以及處理行為。 |
先來看squirrel-foundation github 上面給出的例子,對狀態機有一個直觀的認識
添加maven 依賴
1 2 3 4 5 6 | <!-- 狀態機--> <dependency> <groupId>org.squirrelframework</groupId> <artifactId>squirrel-foundation</artifactId> <version>0.3.8</version> </dependency> |
QuickStartSample demo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | import org.squirrelframework.foundation.fsm.StateMachineBuilderFactory; import org.squirrelframework.foundation.fsm.UntypedStateMachine; import org.squirrelframework.foundation.fsm.UntypedStateMachineBuilder; import org.squirrelframework.foundation.fsm.annotation.StateMachineParameters; import org.squirrelframework.foundation.fsm.impl.AbstractUntypedStateMachine; /** * @Author wtx * @Date 2019/5/5 */ public class QuickStartSample { // 1. Define State Machine Event enum FSMEvent { ToA, ToB, ToC, ToD } // 2. Define State Machine Class @StateMachineParameters(stateType=String.class, eventType=FSMEvent.class, contextType=Integer.class) static class StateMachineSample extends AbstractUntypedStateMachine { protected void fromAToB(String from, String to, FSMEvent event, Integer context) { System.out.println("Transition from '"+from+"' to '"+to+"' on event '"+event+ "' with context '"+context+"'."); } protected void ontoB(String from, String to, FSMEvent event, Integer context) { System.out.println("Entry State \'"+to+"\'."); } } public static void main(String[] args) { // 3. Build State Transitions UntypedStateMachineBuilder builder = StateMachineBuilderFactory.create(StateMachineSample.class); builder.externalTransition().from("A").to("B").on(FSMEvent.ToB).callMethod("fromAToB"); builder.onEntry("B").callMethod("ontoB"); // 4. Use State Machine UntypedStateMachine fsm = builder.newStateMachine("A"); fsm.fire(FSMEvent.ToB, 10); System.out.println("Current state is "+fsm.getCurre5ntState()); } } |
首先使用StateMachineBuilderFactory構造一個UntypedStateMachineBuilder,然后builder.externalTransition(),builder除了externalTransition還有internalTransition(),
.from(“A”).to(“B”).on(FSMEvent.ToB).callMethod(“fromAToB”);
當狀態在A 發生 ToB 事件時,調用 方法fromAToB,然后狀態轉化到 B。
builder.onEntry(“B”).callMethod(“ontoB”);
當狀態轉移到B 時,調用方法ontoB。
1 2 3 | UntypedStateMachine fsm = builder.newStateMachine("A"); // 觸發ToB事件 fsm.fire(FSMEvent.ToB, 10); |
1 | fsm.getCurrentState() |
感謝各位的閱讀,以上就是“squirrel-foundation有限狀態機的詳細介紹”的內容了,經過本文的學習后,相信大家對squirrel-foundation有限狀態機的詳細介紹這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。