Введение

Модель проектирования программного обеспечения. Модель состояния — это поведенческая модель проектирования программного обеспечения, позволяющая объекту изменять своё поведение при изменении своего внутреннего состояния. Эта модель тесно связана с концепцией конечных автоматов. Модель состояния можно рассматривать как вариант модели стратегии, способной переключать стратегии посредством вызова методов, определённых в интерфейсе модели. Модель состояния используется в компьютерном программировании для инкапсуляции различного поведения одного и того же объекта в зависимости от его внутреннего состояния. Это может быть более элегантным способом для объекта изменять своё поведение во время выполнения, избегая использования условных операторов и, таким образом, повышая поддерживаемость кода.

Структура

В прилагаемой диаграмме классов Unified Modeling Language (UML) класс Context не реализует поведение, специфичное для состояния, напрямую. Вместо этого, Context обращается к интерфейсу State для выполнения поведения, специфичного для состояния (state.handle), что делает Context независимым от реализации поведения, специфичного для состояния. Классы ConcreteStateA и ConcreteStateB реализуют интерфейс State, то есть реализуют (инкапсулируют) поведение, специфичное для каждого состояния. Диаграмма последовательностей UML показывает взаимодействия во время выполнения:

Объект Context делегирует поведение, специфичное для состояния, различным объектам State. Сначала Context вызывает handle(this) у своего текущего (начального) объекта состояния (ConcreteStateA), который выполняет операцию и вызывает setState(ConcreteStateB) у Context, чтобы изменить текущее состояние Context на ConcreteStateB. В следующий раз Context снова вызывает handle(this) у своего текущего объекта состояния (ConcreteStateB), который выполняет операцию и изменяет текущее состояние Context на ConcreteStateA.