Паттерн состояние
Очень простой паттерн, суть в следующем. Класс контекст хранит ссылку (свойство) на класс состояния. Класс состояния хранит ссылку на класс контекст. Контекст в конструкторе присваивает какое нибудь состояние присвоив его объект, тем самым открывает себе доступ к функциям состояния. В функциях класса состояния, может быть вызвана функция смены состояния контекста через свойство которое хранит объект контекста передав в нее объект другого состояния. Другое состояние сохранит у себя объект контекста и контекст будет использовать уже функции другого состояния. Player(контекст) state -> [PlayingState (состояние), PauseState, StoppedState] player -> Player