Введение
Модель проектирования программного обеспечения. Модель состояния — это поведенческая модель проектирования программного обеспечения, позволяющая объекту изменять своё поведение при изменении своего внутреннего состояния. Эта модель тесно связана с концепцией конечных автоматов. Модель состояния можно рассматривать как вариант модели стратегии, способной переключать стратегии посредством вызова методов, определённых в интерфейсе модели. Модель состояния используется в компьютерном программировании для инкапсуляции различного поведения одного и того же объекта в зависимости от его внутреннего состояния. Это может быть более элегантным способом для объекта изменять своё поведение во время выполнения, избегая использования условных операторов и, таким образом, повышая поддерживаемость кода.
The state pattern is a behavioral software design pattern that allows an object to alter its behavior when its internal state changes. This pattern is close to the concept of finite state machines. The state pattern can be interpreted as a strategy pattern, which is able to switch a strategy through invocations of methods defined in the pattern's interface. The state pattern is used in computer programming to encapsulate varying behavior for the same object, based on its internal state. This can be a cleaner way for an object to change its behavior at runtime without resorting to conditional statements and thus improve maintainability.
Структура
В прилагаемой диаграмме классов 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.