Поведенческие шаблоны / Состояние
Инкапсулирует состояние объекта в отдельном объекте.
Используется, если в разных состояниях у объекта должно быть разное поведение. Действия в этом случае делегируются объекту состояния.
В процессе выполнения программы состояние объекта может изменяться (переход из одного состояния в другое). Классы конкретных состояний должны содержать информацию о том, в какие состояния и при каких условиях объект может перейти.