https://softwarepatternslexicon.com/object-oriented/behavioral-design-patterns/state-pattern/
State Pattern: Mastering Dynamic Behavior in Object-Oriented Design