Состояние - позволяет объекту изменять свое поведение при изменении внутреннего состояния.

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

`from abc import ABC, abstractmethod

#Базовый интерфейс состояния

class DocumentState(ABC): @abstractmethod def publish(self, document): pass

@abstractmethod def approve(self, document): pass

#Конкретные состояния

class DraftState(DocumentState): def publish(self, document): print("Перевод документа в состояние 'На модерации'") document.state = ModerationState()

def approve(self, document): print("Черновик нельзя одобрить - сначала опубликуйте")

class ModerationState(DocumentState): def publish(self, document): print("Документ уже на модерации")

def approve(self, document): print("Документ одобрен, перевод в состояние 'Опубликован'") document.state = PublishedState()

class PublishedState(DocumentState): def publish(self, document): print("Документ уже опубликован")

def approve(self, document): print("Документ уже опубликован и одобрен")

#Контекст

class Document: def init(self): self.state = DraftState() # Начальное состояние

def publish(self): self.state.publish(self)

def approve(self): self.state.approve(self)

#Использование

doc = Document() doc.publish() # Перевод документа в состояние 'На модерации' doc.approve() # Документ одобрен, перевод в состояние 'Опубликован' doc.publish() # Документ уже опубликован #weekofpatterns`