From 89799257aaffeeb089ac8207cac9b920d2cb2b5b Mon Sep 17 00:00:00 2001
From: SerLiunx-ctrl <17689543@qq.com>
Date: Fri, 11 Apr 2025 09:39:13 +0800
Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E7=9B=B8=E5=85=B3?=
=?UTF-8?q?=E5=B7=A5=E5=85=B7=E7=B1=BB=E7=94=A8=E6=9D=A5=E5=BF=AB=E9=80=9F?=
=?UTF-8?q?=E5=88=9B=E5=BB=BA=E4=B8=80=E4=B8=AA=E7=8A=B6=E6=80=81=E6=9C=BA?=
=?UTF-8?q?.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../machine/support/StateMachines.java | 94 +++++++++++++++++++
.../statemanagement/StateMachinesTest.java | 34 +++++++
2 files changed, 128 insertions(+)
create mode 100644 src/main/java/com/serliunx/statemanagement/machine/support/StateMachines.java
create mode 100644 src/test/java/com/serliunx/statemanagement/StateMachinesTest.java
diff --git a/src/main/java/com/serliunx/statemanagement/machine/support/StateMachines.java b/src/main/java/com/serliunx/statemanagement/machine/support/StateMachines.java
new file mode 100644
index 0000000..4a7315c
--- /dev/null
+++ b/src/main/java/com/serliunx/statemanagement/machine/support/StateMachines.java
@@ -0,0 +1,94 @@
+package com.serliunx.statemanagement.machine.support;
+
+import com.serliunx.statemanagement.machine.ConcurrentStateMachine;
+import com.serliunx.statemanagement.machine.StateMachine;
+import com.serliunx.statemanagement.machine.StateMachineBuilder;
+
+import java.util.List;
+
+/**
+ * 状态机工具类集合
+ *
+ * @author SerLiunx
+ * @since 2025/4/11
+ */
+public final class StateMachines {
+
+ /**
+ * 获取一个仅包含状态的并发型状态机
+ *
+ * 所生成的状态机没有任务事件逻辑,此时仅用作普通的双向状态管理器使用
+ *
+ *
+ * @param states 状态集合
+ *
+ * @return 仅包含状态的并发型状态机
+ * @param 状态
+ * @see ConcurrentStateMachine
+ * @see com.serliunx.statemanagement.manager.BidirectionalStateManager
+ */
+ public static ConcurrentStateMachine concurrentStateMachine(S[] states) {
+ return StateMachineBuilder.from(states)
+ .async(false)
+ .concurrent()
+ .build();
+ }
+
+ /**
+ * 获取一个仅包含状态的并发型状态机
+ *
+ * 所生成的状态机没有任务事件逻辑,此时仅用作普通的双向状态管理器使用
+ *
+ *
+ * @param states 状态集合
+ *
+ * @return 仅包含状态的并发型状态机
+ * @param 状态
+ * @see ConcurrentStateMachine
+ * @see com.serliunx.statemanagement.manager.BidirectionalStateManager
+ */
+ public static ConcurrentStateMachine concurrentStateMachine(List states) {
+ return StateMachineBuilder.from(states)
+ .async(false)
+ .concurrent()
+ .build();
+ }
+
+ /**
+ * 获取一个仅包含状态的普通状态机
+ *
+ * 所生成的状态机没有任务事件逻辑,此时仅用作普通的双向状态管理器使用
+ *
+ *
+ * @param states 状态集合
+ *
+ * @return 仅包含状态的普通状态机
+ * @param 状态
+ * @see StateMachine
+ * @see com.serliunx.statemanagement.manager.BidirectionalStateManager
+ */
+ public static StateMachine defaultStateMachine(S[] states) {
+ return StateMachineBuilder.from(states)
+ .async(false)
+ .build();
+ }
+
+ /**
+ * 获取一个仅包含状态的普通状态机
+ *
+ * 所生成的状态机没有任务事件逻辑,此时仅用作普通的双向状态管理器使用
+ *
+ *
+ * @param states 状态集合
+ *
+ * @return 仅包含状态的普通状态机
+ * @param 状态
+ * @see StateMachine
+ * @see com.serliunx.statemanagement.manager.BidirectionalStateManager
+ */
+ public static StateMachine defaultStateMachine(List states) {
+ return StateMachineBuilder.from(states)
+ .async(false)
+ .build();
+ }
+}
diff --git a/src/test/java/com/serliunx/statemanagement/StateMachinesTest.java b/src/test/java/com/serliunx/statemanagement/StateMachinesTest.java
new file mode 100644
index 0000000..8a194bd
--- /dev/null
+++ b/src/test/java/com/serliunx/statemanagement/StateMachinesTest.java
@@ -0,0 +1,34 @@
+package com.serliunx.statemanagement;
+
+import com.serliunx.statemanagement.machine.ConcurrentStateMachine;
+import com.serliunx.statemanagement.machine.StateMachine;
+import com.serliunx.statemanagement.machine.support.StateMachines;
+import com.serliunx.statemanagement.support.PrinterState;
+import org.junit.Test;
+
+/**
+ * 状态机工具类测试
+ *
+ * @author SerLiunx
+ * @since 2025/4/11
+ */
+public class StateMachinesTest {
+
+ @Test
+ public void testConcurrentStateMachines() throws Exception {
+ ConcurrentStateMachine machine = StateMachines.concurrentStateMachine(PrinterState.values());
+ System.out.println(machine.current());
+ System.out.println(machine.switchPrevAndGet());
+ System.out.println(machine.current());
+ machine.close();
+ }
+
+ @Test
+ public void testStateMachines() throws Exception {
+ StateMachine machine = StateMachines.defaultStateMachine(PrinterState.values());
+ System.out.println(machine.current());
+ System.out.println(machine.switchNextAndGet());
+ System.out.println(machine.current());
+ machine.close();
+ }
+}