Состояние
State
Тип поведенческий
Описан в Design Patterns Да

Состояние (англ. State) — поведенческий шаблон проектирования. Используется в тех случаях, когда во время выполнения программы объект должен менять своё поведение в зависимости от своего состояния.

Паттерн состоит из 3 блоков:

Widget — класс, объекты которого должны менять своё поведение в зависимости от состояния.

IState — интерфейс, который должен реализовать каждое из конкретных состояний. Через этот интерфейс объект Widget взаимодействует с состоянием, делегируя ему вызовы методов. Интерфейс должен содержать средства для обратной связи с объектом, поведение которого нужно изменить. Для этого используется событие (паттерн Publisher — Subscriber). Это необходимо для того, чтобы в процессе выполнения программы заменять объект состояния при появлении событий. Возможны случаи, когда сам Widget периодически опрашивает объект состояния на наличие перехода.

StateA … StateZ — классы конкретных состояний. Должны содержать информацию о том, при каких условиях и в какие состояния может переходить объект из текущего состояния. Например, из StateA объект может переходить в состояние StateB и StateC, а из StateB — обратно в StateA и так далее. Объект одного из них должен содержать Widget при создании.

Применение данного паттерна может быть затруднено, если состояния должны обмениваться данными, или одно состояние настраивает свойства другого. В этом случае понадобится глобальный объект, что не очень хорошее архитектурное решение.

Примеры

править

Пример на C++

править

Пример на C#

править

Применение шаблона

Тот же пример, без применения шаблона

Пример на Java

править

Пример на Python

править

Пример на Javascript

править

Пример со сменой состояний из State.

Смена состояний с помощью вызова метода у Widget (из англоязычной версии статьи).

Пример на CoffeeScript

править

Пример на VB.NET

править

Применение шаблона

Тот же пример, без применения шаблона

Пример на PHP5

править


📚 Artikel Terkait di Wikipedia

JSON

appendChild(script); // retrieve answer } function s3db_jsonpp(ans, jsonpp){ eval(jsonpp); return ans; } function remove_element_by_id(id){ var e = document

Программное обеспечение

математиком Аланом Тьюрингом в 1936 году в эссе «On computable numbers with an application to the Entscheidungsproblem» («О вычислимых числах с приложением к проблеме

Application Services Library

ASL (произносится «а-эс-эл», англ. Application Services Library — библиотека услуг приложений) — это фреймворк, используемый в управлении приложениями

Расстояние Дамерау — Левенштейна

Len(target) * insertCost Exit Function End If If Len(target) = 0 Then WeightedDL = Len(source) * deleteCost Exit Function End If Dim table() As Double

C++20

февраля 2019. Архивировано 20 июля 2018 года. Simplified partial function application . Дата обращения: 2 февраля 2021. Архивировано 28 сентября 2020 года

Microsoft Excel

2008 под Mac OS X, язык макропрограммирования VBA (Visual Basic for Application). Microsoft Excel входит в состав Microsoft Office. В 1982 году фирма

Внедрение зависимости

$password; } public function getHost() { return $this->host; } public function getPort() { return $this->port; } public function getUsername() { return

TypeScript

модуля «crypto», встроенного в Node.js: import * as crypto from "crypto"; function generate(length: number = 16) : string { const uppercase: string =