This is example of a state machine created using stateless4j library.
This example models a simple jukebox.
The above diagram encoded using stateless4j
API:
var config = new StateMachineConfig<State, Trigger>();
config.configure(State.IDLE)
.permit(Trigger.COIN_INSERTED, State.SELECTION);
config.configure(State.SELECTION)
.onEntry(Main::showSongsList)
.onExit(Main::hideSongsList)
.permit(Trigger.START, State.PLAYING, Main::consumeCoin)
.permit(Trigger.CANCEL, State.IDLE, Main::returnCoin);
config.configure(State.RUNNING)
.onEntry(Main::showTimer)
.onExit(Main::hideTimer)
.permit(Trigger.STOP, State.IDLE);
config.configure(State.PLAYING)
.substateOf(State.RUNNING)
.onEntry(Main::playSong)
.permit(Trigger.PAUSE, State.PAUSED);
config.configure(State.PAUSED)
.substateOf(State.RUNNING)
.onEntry(Main::pauseSong)
.permit(Trigger.RESUME, State.PLAYING);
Refer to full example source code
Diagram is created using PlantUML. You can install PlantUML plugin for JetBrains IDEA
to enjoy real-time preview. See top of Main
class.