Что такое паттерн Наблюдатель (Observer)?
Паттерн Наблюдатель используется для автоматического уведомления связанных объектов об изменении состояния другого объекта.
Короткий ответ
Паттерн Наблюдатель определяет зависимость "один ко многим", где изменение состояния одного объекта автоматически уведомляет все связанные объекты. Это полезно для реализации системы событий и реакций.
Длинный ответ
Паттерн Наблюдатель применяется, когда несколько объектов должны реагировать на изменение состояния одного объекта, но прямые зависимости между ними создавать нежелательно. Главный объект, называемый издатель, отслеживает список подписчиков (наблюдателей) и уведомляет их при изменении.
Пример из реальной жизни:
Подписка на новости: издатель (например, газета) уведомляет подписчиков (читателей) о выпуске новых статей.
Реализация в Python:
class Publisher:
def __init__(self):
self.subscribers = []
def subscribe(self, subscriber):
self.subscribers.append(subscriber)
def unsubscribe(self, subscriber):
self.subscribers.remove(subscriber)
def notify(self, message):
for subscriber in self.subscribers:
subscriber.update(message)
class Subscriber:
def update(self, message):
print(f"Получено сообщение: {message}")
# Использование
publisher = Publisher()
sub1 = Subscriber()
sub2 = Subscriber()
publisher.subscribe(sub1)
publisher.subscribe(sub2)
publisher.notify("Новая статья доступна!")Когда использовать:
- Для реализации системы событий.
- Когда требуется уведомлять множество объектов об изменении состояния другого объекта.