diff --git a/src/main/java/com/serliunx/statemanagement/manager/StateManager.java b/src/main/java/com/serliunx/statemanagement/manager/StateManager.java index 1285b66..fddb06e 100644 --- a/src/main/java/com/serliunx/statemanagement/manager/StateManager.java +++ b/src/main/java/com/serliunx/statemanagement/manager/StateManager.java @@ -58,7 +58,7 @@ public interface StateManager { * @param state 指定的状态 * @return 符合返回真, 否则返回假 */ - default boolean now(S state) { + default boolean is(S state) { return current().equals(state); } @@ -71,9 +71,20 @@ public interface StateManager { * @param newState 新的状态 * @return 如果当前状态不符合或者不可切换则返回假, 否则走切换逻辑, 此时结果取决于切换的结果. */ - default boolean switchToIfPresent(S now, S newState) { + default boolean switchToIfMatch(S now, S newState) { if (isSwitchable() || now.equals(current())) return switchTo(newState); return false; } + + /** + * 如果当前状态为指定的状态则运行所指定的逻辑 + * + * @param state 状态 + * @param action 逻辑 + */ + default void computeIfMatch(S state, Runnable action) { + if (is(state)) + action.run(); + } } diff --git a/src/test/java/com/serliunx/statemanagement/ManagerTest.java b/src/test/java/com/serliunx/statemanagement/ManagerTest.java index bf009de..e30fe2a 100644 --- a/src/test/java/com/serliunx/statemanagement/ManagerTest.java +++ b/src/test/java/com/serliunx/statemanagement/ManagerTest.java @@ -1,8 +1,6 @@ package com.serliunx.statemanagement; -import com.serliunx.statemanagement.manager.BreakageUnidirectionalStateManager; -import com.serliunx.statemanagement.manager.DefaultUnidirectionalStateManager; -import com.serliunx.statemanagement.manager.UnidirectionalStateManager; +import com.serliunx.statemanagement.manager.*; import com.serliunx.statemanagement.support.PrinterState; import org.junit.Test; import org.slf4j.Logger; @@ -37,4 +35,17 @@ public class ManagerTest { } System.out.println(bum.current()); } + + @Test + public void testDefaultMethod() throws Exception { + BidirectionalStateManager bsm = new DefaultBidirectionalStateManager<>(PrinterState.values()); + + bsm.switchPrev(); + + log.info("{}", bsm.current()); + + bsm.computeIfMatch(PrinterState.IDLE, () -> { + log.info("hello~"); + }); + } }