Наблюдатель - который создает механизм подписки, позволяющий одним объектам (наблюдателям) следить и реагировать на события, происходящие в субъектах.

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

`class Event: def init(self): self._handlers = []

def subscribe(self, handler): self._handlers.append(handler)

def unsubscribe(self, handler): self._handlers.remove(handler)

def fire(self, args, **kwargs): for handler in self._handlers: handler(args, **kwargs)

class Button: def init(self): self.click_event = Event()

def click(self): print("Кнопка нажата") self.click_event.fire(self)

#Наблюдатели

def log_click(sender): print(f"Лог: Кнопка {sender} была нажата")

def show_message(sender): print("Показать сообщение: Кнопка нажата!")

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

button = Button() button.click_event.subscribe(log_click) button.click_event.subscribe(show_message)

button.click() #weekofpatterns`