Состояние
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

Фабричный метод (шаблон проектирования)

PHP <?php interface Product{ public function GetName(); } class ConcreteProductA implements Product{ public function GetName() { return "ProductA"; } }

Алгоритм Кнута — Морриса — Пратта

текста T {\displaystyle \displaystyle T} . function KMP(S, T) k ← 0 A ← ø // A - пустое множество π ← Prefix_Function(S) // считается префикс-функция от образца

Наблюдатель (шаблон проектирования)

implements SplSubject { private $storage; function __construct() { $this->storage = new SplObjectStorage(); } function attach(SplObserver $observer) {

Куклин, Владимир Михайлович

Gushchin, A.V. Kirichok, V.M. Kuklin. Structural-phase transitions and state function in unstable convective medium/ VANT, 2015 N4 — series «Plasma Electronics

Нацистская Германия

978-0-451-23791-0. Wegner, Bernd. The Waffen-SS: Organization, Ideology and Function (англ.). — Hoboken, NJ: Blackwell, 1990. — ISBN 978-0-631-14073-3. Weinberg

Сексуальные фантазии

1111/jsm.12734 Knox, Jean (2005), Sex, shame and the transcendent function: the function of fantasy in self development, Journal of Analytical Psychology

Хранитель (шаблон проектирования)

private $state; public function setState($state) { $this->state = $state; echo sprintf("State setted %s\n", $this->state); } public function getState() { return

Шойгу, Сергей Кужугетович

гражданина Тульской области : Министерство обороны Российской Федерации . function.old.mil.ru. Дата обращения: 12 ноября 2021. Архивировано 27 января 2022