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()); } }