stringtranslate.com

Государственный образец

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

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

Обзор

Пример класса UML и диаграммы последовательности для шаблона проектирования State. [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. ^ ab Erich Gamma ; Richard Helm ; Ralph Johnson ; John M. Vlissides (1995). Шаблоны проектирования: элементы повторно используемого объектно-ориентированного программного обеспечения . Addison-Wesley . ISBN 0-201-63361-2.
  2. ^ "Шаблон проектирования State – Структура и сотрудничество". w3sDesign.com . Получено 2017-08-12 .
  3. ^ Эрих Гамма; Ричард Хелм; Ральф Джонсон; Джон Влиссидес (1994). Шаблоны проектирования: элементы повторно используемого объектно-ориентированного программного обеспечения . Эддисон Уэсли. стр. 305 и далее. ISBN 0-201-63361-2.
  4. ^ "Шаблон проектирования State - проблема, решение и применимость". w3sDesign.com . Получено 2017-08-12 .