作者:不喜歡基於事件的狀態機實現,因此我建立了一個型別化、函式式、簡單且直接的狀態機庫。點選標題
安裝:
<dependency> |
法
public class Demo {
public void demo() {
// 建立一個狀態機生成器,輸入為整數,輸出為字串,命名為 demo
StateMachineBuilder<Integer, String> builder = StateMachineBuilder.create("demo");
// 定義狀態
// s1 具有整數輸入,名稱為 "int 1"
State<Integer> s1 = builder.newTransitionState("int 1");
// s2 具有名為 "int 2 "的整數輸入值
State<Integer> s2 = builder.newTransitionState("int 2");
//s3 的字串輸入名為 "str"。
// 它是一個輸出狀態,因此到達該狀態的任何值都被視為輸出值
State<String> s3 = builder.newOutputState("str");
// 定義轉換
// state1 ----> state2 ----> state3 (轉為字串)
builder.addTransition(s1, i -> s2.of(i * 2));
builder.addTransition(s2, i -> {
if (i > 5) {
return s3.of(String.valueOf(i + 1));
} else {
return s3.of(String.valueOf(i * 3));
}
});
StateMachine<Integer, String> stateMachine = builder.build();
//從狀態 1 觸發狀態機
assertEquals("6", stateMachine.run(s1.of(1)).getOutputs().get(0)); // 1 * 2 * 3 = 6
//從狀態 1 觸發狀態機
assertEquals("7", stateMachine.run(s2.of(6)).getOutputs().get(0)); // 6 + 1 = 7
}
}