Паттерны на ruby: Состояние

Описание: Данный паттерн позволяет менять поведение объекта в зависимости от его состояния.

Пример задачи: Мы пишем сервис документооборота. У каждого документа есть минимум три состояния “черновик”, “на модерации”, “опубликован”. В каждом из этих состояний, у документа должно быть свое поведение плюс необходимо заложить функционал перехода между состояниями.

Реализация: За работу документа отвечает класс <Document>. У него есть скрытый атрибут @state отвечающий за состояние. Многие методы класса <Document> делегируют свою работу атрибуту @state . Для состоянии необходимо написать классы <DraftState>, <ModerateState>, <PublishedState> подробно описывающие поведение.