From cd24c7de99c7f1dc4e18faa3901fd2cc9d1734d3 Mon Sep 17 00:00:00 2001 From: SerLiunx-ctrl <17689543@qq.com> Date: Wed, 23 Apr 2025 17:19:58 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E3=80=81=E8=B0=83=E6=95=B4=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E5=90=8D=E5=8F=8A=E6=96=87=E6=A1=A3=E6=B3=A8=E9=87=8A.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../statemanagement/manager/StateManager.java | 15 +++++++++++++-- .../serliunx/statemanagement/ManagerTest.java | 17 ++++++++++++++--- 2 files changed, 27 insertions(+), 5 deletions(-) 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~"); + }); + } }