change: 代码整理、定向切换时校验当前状态.

This commit is contained in:
2024-12-31 09:21:03 +08:00
parent 682266b591
commit 5fed1bbf19
9 changed files with 46 additions and 15 deletions

View File

@@ -22,20 +22,23 @@ public class MachineTest {
public void testStandardStateMachine() {
StateMachine<PrinterState> stateMachine = StateMachineBuilder.from(PrinterState.class)
.async(false)
.states(PrinterState.values())
.executor(Executors.newFixedThreadPool(16))
.whenLeave(PrinterState.PRINTING, h -> {
System.out.println(Thread.currentThread().getName() + ": leave PRINTING");
})
.states(PrinterState.values())
.executor(Executors.newFixedThreadPool(16))
.whenEntry(PrinterState.SCANNING, h -> {
System.out.println(Thread.currentThread().getName() + ": " + h.getFrom() + " >>> " + h.getTo());
}, false)
})
.whenEntry(PrinterState.PRINTING, h -> {
System.out.println(Thread.currentThread().getName() + ": " + h.getFrom() + " >>> " + h.getTo());
}, false, Executors.newFixedThreadPool(1))
})
.exchange(PrinterState.STOPPED, PrinterState.IDLE, h -> {
System.out.println(Thread.currentThread().getName() + ": " + h.getFrom() + " >>> " + h.getTo());
})
.build();
stateMachine.switchTo(PrinterState.PRINTING);
stateMachine.switchNext();
}
}

View File

@@ -1,5 +1,8 @@
package com.serliunx.statemanagement;
import com.serliunx.statemanagement.manager.DefaultUnidirectionalStateManager;
import com.serliunx.statemanagement.manager.UnidirectionalStateManager;
import com.serliunx.statemanagement.support.PrinterState;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
@@ -15,6 +18,10 @@ public class ManagerTest {
@Test
public void testUnidirectionalStateManager() {
UnidirectionalStateManager<PrinterState> unidirectionalStateManager =
new DefaultUnidirectionalStateManager<>(PrinterState.values());
System.out.println(unidirectionalStateManager.switchTo(PrinterState.IDLE));
System.out.println(unidirectionalStateManager.switchTo(PrinterState.SCANNING));
}
}