From 2f407e4cea015e9e8b0ae10a4dbe9dee05aa7585 Mon Sep 17 00:00:00 2001 From: SerLiunx-ctrl <17689543@qq.com> Date: Mon, 13 Jan 2025 14:47:24 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=8A=B6=E6=80=81=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E5=99=A8=E6=96=B0=E5=A2=9E=E6=98=AF=E5=90=A6=E5=8F=AF=E5=88=87?= =?UTF-8?q?=E6=8D=A2=E7=9A=84=E6=A3=80=E6=9F=A5.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../statemanagement/manager/AbstractStateManager.java | 5 +++++ .../manager/BreakageUnidirectionalStateManager.java | 5 +++++ .../serliunx/statemanagement/manager/StateManager.java | 9 +++++++++ .../java/com/serliunx/statemanagement/ManagerTest.java | 7 +++++-- 4 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/serliunx/statemanagement/manager/AbstractStateManager.java b/src/main/java/com/serliunx/statemanagement/manager/AbstractStateManager.java index bbd99ee..0ced3a5 100644 --- a/src/main/java/com/serliunx/statemanagement/manager/AbstractStateManager.java +++ b/src/main/java/com/serliunx/statemanagement/manager/AbstractStateManager.java @@ -100,6 +100,11 @@ public abstract class AbstractStateManager implements StateManager { } } + @Override + public boolean isSwitchable() { + return stateList.size() > 1; + } + /** * 将序号移动至下一个 *
  • 自动归零 diff --git a/src/main/java/com/serliunx/statemanagement/manager/BreakageUnidirectionalStateManager.java b/src/main/java/com/serliunx/statemanagement/manager/BreakageUnidirectionalStateManager.java index d454aa5..66017a7 100644 --- a/src/main/java/com/serliunx/statemanagement/manager/BreakageUnidirectionalStateManager.java +++ b/src/main/java/com/serliunx/statemanagement/manager/BreakageUnidirectionalStateManager.java @@ -87,4 +87,9 @@ public final class BreakageUnidirectionalStateManager extends DefaultUnidirec public void reset() { throw new UnsupportedOperationException("Cannot reset state for BreakageUnidirectionalStateManager!"); } + + @Override + public boolean isSwitchable() { + return !isLast(); + } } diff --git a/src/main/java/com/serliunx/statemanagement/manager/StateManager.java b/src/main/java/com/serliunx/statemanagement/manager/StateManager.java index be6049e..9fc63aa 100644 --- a/src/main/java/com/serliunx/statemanagement/manager/StateManager.java +++ b/src/main/java/com/serliunx/statemanagement/manager/StateManager.java @@ -30,4 +30,13 @@ public interface StateManager { * 重置回默认状态, 一般为状态集合中的第一个 */ void reset(); + + /** + * 是否可切换 + * + * @return 可切换返回真, 否则返回假 + */ + default boolean isSwitchable() { + return true; + } } diff --git a/src/test/java/com/serliunx/statemanagement/ManagerTest.java b/src/test/java/com/serliunx/statemanagement/ManagerTest.java index 66bc1ad..b63af48 100644 --- a/src/test/java/com/serliunx/statemanagement/ManagerTest.java +++ b/src/test/java/com/serliunx/statemanagement/ManagerTest.java @@ -29,7 +29,10 @@ public class ManagerTest { @Test public void testBreakageUnidirectionalStateManager() { UnidirectionalStateManager bum = new BreakageUnidirectionalStateManager<>(PrinterState.values()); - System.out.println(bum.isCircle()); - bum.switchNext(); + + while (bum.isSwitchable()) { + System.out.println(bum.getAndSwitchNext()); + } + System.out.println(bum.current()); } }