State Machines
What
A state machine can be loosely defined as anything with a set of known states
A system or process, where it can only be in one state at a time
A collection of states, which when triggered by an event starts a transitions a state from the old state to a new state.
As part of this transitioning, actions can take place
These events can be
Times/dates/timers will do something
incoming request to the system (http request, gui trigger)
Scheduled action
listening for some change somewhere (filesytem being updated, a queue)
When in the new state, it can take some actions
ie store the state in the database, inform the user (request/gui update), validate next transition from event (is event legal)
History
Comes from the idea of Finite Automata invented by McCulloch and Pitts in 1943
Finite Automata consists of
Finite set of states
Set of inputs
Initial State
Final State
Transition Function
Why use
In general, most code is a state machine, using
multiple if -else
case/switch statements
These can get messy and confusing, hard to debug with more states
Using a FSM can help improve clarity of the flow from state to state
define consistent behavior for a finite number of states
Application logic is defined for specific states or state transitions
Application logic becomes more modular and more precisely defined
Usage
Message (Event) based applications
Events get published based on state changes
UI Applications With Actions triggered by Use - Caps Lock On, Caps Lock Off
Application behavior changes based on known states
Terminology
States - The specific state of the state machine. Finite and predetermined values.
Frequently defined in an enumeration
Events - Something that happens to the system - may or may not change the state.
Actions - The response of the State Machine to events. Can be changing variables, calling a method or changing to a different state
Transitions - Type of action which changes state
Guards - Boolean conditions
Extended State - State Machine variables (in addition to state)
https://medium.com/datadriveninvestor/state-machine-design-pattern-why-how-example-through-spring-state-machine-part-1-f13872d68c2d
Examples
https://github.com/shanwu/finite_state_machine/tree/master/FiniteStateMachine/src/main/java/FiniteStateMachine
https://www.baeldung.com/java-enum-simple-state-machine
https://blog.frankel.ch/builder-pattern-finite-state-machine/
https://medium.com/datadriveninvestor/state-machine-design-pattern-part-2-state-pattern-vs-state-machine-3010dd0fcf28
https://rclayton.silvrback.com/use-state-machines
http://www.java2s.com/Code/Java/Collections-Data-Structure/AprogrammableFiniteStateMachineimplementation.htm
Last updated