Перейти к основному содержимому

Состояние (State)

Теория

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

БСП

Примеры

Код

В среде 1С это можно реализовать следующим образом:

  1. Для отражения различных состояний этого объекта создаются отдельные перечисления.
  2. Описываются общие модули для каждого отдельного состояния, реализующие необходимую бизнес-логику.
  3. В общем модуле объекта метаданных или в его обработчиках вызываются модули, соответствующие текущему состоянию объекта.

Рассмотрим документ "Заявка на отпуск" со следующими состояниями:

  • Новая
  • Согласована
  • Отказано

Реализуем следующим образом:

  1. Заведем перечисление СостоянияЗаявкиОтпуска
  2. Объявим общие модули для каждого состояния:
    • ОбработкаНовойЗаяки
    • ОбработкаСогласованнойЗаявки
    • ОбработкаОтказаннойЗаявки
  3. В модуле менеджера перечисления создадим функцию:
Функция МодульОбработки(Состояние) Экспорт

Если Состояние = Новая Тогда
Модуль = ОбработкаНовойЗаяки;
ИначеЕсли Состояние = Согласована Тогда
Модуль = ОбработкаСогласованнойЗаявки;
ИначеЕсли Состояние = Отказана Тогда
Модуль = ОбработкаОтказаннойЗаявки;
Иначе
ВызватьИсключение "Неизвестное состояние";
КонецЕсли;

Возврат Модуль;

КонецФункции
  1. В документе "Заявка на отпуск":
Процедура ПриКорректировке()

Модуль = Перечисления.СостоянияЗаявкиОтпуска.МодульОбработки(Состояние);
Модуль.Обработать(ЭтотОбъект);

КонецПроцедуры