Паттерн State относится к поведенческим паттернам уровня объекта.
Паттерн State позволяет объекту изменять свое поведение в зависимости от внутреннего состояния и является объектно-ориентированной реализацией конечного автомата. Поведение объекта изменяется на столько, что создается впечатление, что изменился класс объекта.
Паттерн должен применятся, когда поведение объекта зависит от его состояния и оно должно изменяться во время выполнения программы при условии того, что состояний достаточно много и использовать для этого условные операторы разбросаные по коду достаточно затруднительно.
Требуется для реализации:
- Класс Context, представляет собой объектно-ориентированное представление конечного автомата;
- Абстрактный класс State, определяющий интерфейс различных состояний;
- Класс ConcreteStateA, реализует одно из поведений ассоциированное с определенным состоянием;
- Класс ConcreteStateB, реализует одно из поведений ассоциированное с определенным состоянием.
[!] В описании паттерна применяются общие понятия, такие как Класс, Объект, Абстрактный класс. Применимо к языку Go, это Пользовательский Тип, Значение этого Типа и Интерфейс. Также в языке Go за место общепринятого наследования используется агрегирование и встраивание.