stringtranslate.com

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

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

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

Обзор

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

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

Шаблон состояний предназначен для решения двух основных проблем: [4]

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

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


Состав

Состояние в UML [1]

На прилагаемой диаграмме классов Unified Modeling Language (UML) класс не реализует поведение, зависящее от состояния, напрямую. Вместо этого относится к интерфейсу для выполнения поведения, зависящего от состояния ( ), который делает независимым от того, как реализуется поведение, зависящее от состояния. Классы и реализуют интерфейс, то есть реализуют (инкапсулируют) поведение, зависящее от состояния, для каждого состояния. Диаграмма последовательности UML показывает взаимодействие во время выполнения:ContextContextStatestate.handle()ContextConcreteStateAConcreteStateBState

Объект 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 г.