Образец состояния
Шаблон состояния — это поведенческий шаблон проектирования программного обеспечения , который позволяет объекту изменять свое поведение при изменении его внутреннего состояния. Эта закономерность близка к концепции конечных автоматов . Шаблон состояния можно интерпретировать как шаблон стратегии , который способен переключать стратегию посредством вызовов методов, определенных в интерфейсе шаблона.
Шаблон состояния используется в компьютерном программировании для инкапсуляции различного поведения одного и того же объекта в зависимости от его внутреннего состояния. Это может быть более простым способом изменения поведения объекта во время выполнения, не прибегая к условным операторам, и, таким образом, улучшить удобство обслуживания. [1] : 395
Обзор
[ редактировать ]Шаблон проектирования состояний — один из двадцати трех шаблонов проектирования, задокументированных «Бандой четырех» , которые описывают, как решать повторяющиеся проблемы проектирования. Такие проблемы охватывают разработку гибкого и многократно используемого объектно-ориентированного программного обеспечения, например объектов, которые легко реализовать, изменить, протестировать и повторно использовать. [3]
Паттерн состояний призван решить две основные проблемы: [4]
- Объект должен менять свое поведение при изменении его внутреннего состояния.
- Поведение, специфичное для состояния, должно определяться независимо. То есть добавление новых состояний не должно влиять на поведение существующих состояний.
Реализация поведения, зависящего от состояния, непосредственно внутри класса является негибкой, поскольку она связывает класс с определенным поведением и делает невозможным добавление нового состояния или изменение поведения существующего состояния позже, независимо от класса, без изменения класса. При этом шаблон описывает два решения:
- Определите отдельные объекты (состояния), которые инкапсулируют поведение, специфичное для каждого состояния. То есть определите интерфейс (состояние) для выполнения поведения, специфичного для состояния, и определите классы, реализующие интерфейс для каждого состояния.
- Класс делегирует поведение, зависящее от состояния, своему текущему объекту состояния вместо того, чтобы напрямую реализовывать поведение, зависящее от состояния.
Это делает класс независимым от того, как реализовано поведение, зависящее от состояния. Новые состояния могут быть добавлены путем определения новых классов состояний. Класс может изменить свое поведение во время выполнения, изменив объект текущего состояния.
Структура
[ редактировать ]На прилагаемой Unified Modeling Language (UML) классов диаграмме Context
класс не реализует поведение, зависящее от состояния, напрямую. Вместо, Context
относится к State
интерфейс для выполнения поведения, зависящего от состояния ( state.handle()
), что делает Context
независимо от того, как реализовано поведение, зависящее от состояния. ConcreteStateA
и ConcreteStateB
классы реализуют State
интерфейс, то есть реализовать (инкапсулировать) поведение, специфичное для каждого состояния. UML Диаграмма последовательности показывает взаимодействие во время выполнения:
The Context
объект делегирует поведение, специфичное для состояния, различным State
объекты. Первый, Context
звонки handle(this)
на его текущем (начальном) состоянии объекта ( ConcreteStateA
), который выполняет операцию и вызывает setState(ConcreteStateB)
на Context
изменить текущее состояние контекста на ConcreteStateB
. В следующий раз, Context
снова звонит handle(this)
на объекте текущего состояния ( ConcreteStateB
), который выполняет операцию и изменяет текущее состояние контекста на ConcreteStateA
.
Ссылки
[ редактировать ]- ^ Перейти обратно: а б Эрих Гамма ; Ричард Хелм ; Ральф Джонсон ; Джон М. Влиссидес (1995). Шаблоны проектирования: элементы объектно-ориентированного программного обеспечения многократного использования . Аддисон-Уэсли . ISBN 0-201-63361-2 .
- ^ «Шаблон государственного проектирования – структура и сотрудничество» . w3sDesign.com . Проверено 12 августа 2017 г.
- ^ Эрих Гамма; Ричард Хелм; Ральф Джонсон; Джон Влиссидес (1994). Шаблоны проектирования: элементы объектно-ориентированного программного обеспечения многократного использования . Эддисон Уэсли. стр. 305 и далее . ISBN 0-201-63361-2 .
- ^ «Шаблон проектирования состояний: проблема, решение и применимость» . w3sDesign.com . Проверено 12 августа 2017 г.