Skip to content
Pandas edited this page Jun 20, 2017 · 1 revision

Назначение

Позволяет объекту варьировать свое поведение в зависимости от внутреннего состояния. Извне создается впечатление, что изменился класс объекта.

Применимость

  • Используйте паттерн состояние в следующих случаях:
  • Когда поведение объекта зависит от его состояния и должно изменяться во время выполнения;
  • Когда в коде операций встречаются состоящие из многих ветвей условные операторы, в которых выбор ветви зависит от состояния. Обычно в таком случае состояние представлено перечисляемыми константами. Часто одна и та же структура условного оператора повторяется в нескольких операциях. Паттерн состояние предлагает поместить каждую ветвь в отдельный класс. Это позволяет трактовать состояние объекта как самостоятельный объект, который может изменяться независимо от других.

Структура

Imgur

Участники

  • Context - контекст: определяет интерфейс, представляющий интерес для клиентов; хранит экземпляр подкласса ConcreteState, которым определяется текущее состояние;
  • State - состояние: определяет интерфейс для инкапсуляции поведения, ассоциированного с конкретным состоянием контекста Context;
  • Подклассы ConcreteState - конкретное состояние: каждый подкласс реализует поведение, ассоциированное с некоторым состоянием контекста Context.

Отношения

  • класс Context делегирует зависящие от состояния запросы текущему объ екту ConcreteState;
  • контекст может передать себя в качестве аргумента объекту State, кото рый будет обрабатывать запрос. Это дает возможность объекту состоянию при необходимости получить доступ к контексту;
  • Context–этоосновнойинтерфейсдляклиентов.Клиентымогутконфигу рировать контекст объектами состояния State. Один раз сконфигуриро вав контекст, клиенты уже не должны напрямую связываться с объектами состояния;
  • либо Context, либо подклассы ConcreteState могут решить, при каких условиях и в каком порядке происходит смена состояний.

Результаты

  • Результаты использования паттерна состояние:
  • Локализует зависящее от состояния поведение и делит его на части, соответствующие состояниям.
  • Делает явными переходы между состояниями.
  • Объекты состояния можно разделять.
Clone this wiki locally