Также называется шаблоном конечного автомата. Сложная логика оценки упрощается за счет определения различных классов состояний для инкапсуляции поведения, связанного с конкретными состояниями, и переноса логики оценки состояния в ряд классов, представляющих разные состояния.
Шаблон состояния разделяет состояние и поведение, позволяя объекту изменять свое поведение при изменении его внутреннего состояния.
Каждое состояние соответствует подклассу, тем самым распределяя логику перехода состояний по подклассам состояний, уменьшая взаимозависимость.
Клиент обычно не взаимодействует с объектом состояния напрямую, а взаимодействует с объектом состояния через класс среды (Контекст).
Применимая сцена
Поведение объекта зависит от его состояния, и оно должно изменять свое поведение во время выполнения в зависимости от состояния.
Операция содержит огромную многоветвевую структуру, и эти ветви определяются состоянием объекта.
Стандартный пример
На диаграмме структуры шаблона состояний он обычно содержит следующие роли:
Контекст (класс среды): также называемый классом контекста, это объект с несколькими состояниями. Поддерживайте экземпляр абстрактного класса состояний State в классе среды, который определяет текущее состояние.
Состояние (класс абстрактного состояния): используется для определения интерфейса для инкапсуляции поведения, связанного с определенным состоянием класса среды. Методы, соответствующие различным состояниям, объявляются в классе абстрактного состояния и реализуются в подклассах.
ConcreteState (класс конкретного состояния): это подкласс класса абстрактного состояния. Каждый подкласс реализует поведение, связанное с состоянием класса среды.