Jump to content

Образец состояния

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

Шаблон состояния используется в компьютерном программировании для инкапсуляции различного поведения одного и того же объекта в зависимости от его внутреннего состояния. Это может быть более простым способом изменения поведения объекта во время выполнения, не прибегая к условным операторам, и, таким образом, улучшить удобство обслуживания. [1] : 395 

Пример класса UML и диаграммы последовательности для шаблона проектирования «Состояние». [2]

Шаблон проектирования состояний — один из двадцати трех шаблонов проектирования, задокументированных «Бандой четырех» , которые описывают, как решать повторяющиеся проблемы проектирования. Такие проблемы охватывают разработку гибкого и многократно используемого объектно-ориентированного программного обеспечения, например объектов, которые легко реализовать, изменить, протестировать и повторно использовать. [3]

Паттерн состояний призван решить две основные проблемы: [4]

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

Реализация поведения, зависящего от состояния, непосредственно внутри класса является негибкой, поскольку она связывает класс с определенным поведением и делает невозможным добавление нового состояния или изменение поведения существующего состояния позже, независимо от класса, без изменения класса. При этом шаблон описывает два решения:

  • Определите отдельные объекты (состояния), которые инкапсулируют поведение, специфичное для каждого состояния. То есть определите интерфейс (состояние) для выполнения поведения, специфичного для состояния, и определите классы, реализующие интерфейс для каждого состояния.
  • Класс делегирует поведение, зависящее от состояния, своему текущему объекту состояния вместо того, чтобы напрямую реализовывать поведение, зависящее от состояния.

Это делает класс независимым от того, как реализовано поведение, зависящее от состояния. Новые состояния могут быть добавлены путем определения новых классов состояний. Класс может изменить свое поведение во время выполнения, изменив объект текущего состояния.


Структура

[ редактировать ]
Состояние в UML [1]

На прилагаемой 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.

  1. ^ Перейти обратно: а б Эрих Гамма ; Ричард Хелм ; Ральф Джонсон ; Джон М. Влиссидес (1995). Шаблоны проектирования: элементы объектно-ориентированного программного обеспечения многократного использования . Аддисон-Уэсли . ISBN  0-201-63361-2 .
  2. ^ «Шаблон государственного проектирования – структура и сотрудничество» . w3sDesign.com . Проверено 12 августа 2017 г.
  3. ^ Эрих Гамма; Ричард Хелм; Ральф Джонсон; Джон Влиссидес (1994). Шаблоны проектирования: элементы объектно-ориентированного программного обеспечения многократного использования . Эддисон Уэсли. стр. 305 и далее . ISBN  0-201-63361-2 .
  4. ^ «Шаблон проектирования состояний: проблема, решение и применимость» . w3sDesign.com . Проверено 12 августа 2017 г.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 635d28f608e69687a10d519f035258c8__1697805900
URL1:https://arc.ask3.ru/arc/aa/63/c8/635d28f608e69687a10d519f035258c8.html
Заголовок, (Title) документа по адресу, URL1:
State pattern - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)