Створення гнучкої системи сповіщення є важливим для сучасних додатків програмного забезпечення. Патернувальник, дизайн-матер в програмній інженерії, забезпечує елегантне рішення для реалізації таких систем на Python. Він дозволяє об'єктам, які мають можливість підписатися на інші об'єкти динамічно, сприяння розмиттю та масштабованості.

Розуміння шаблону спостерігача

У статті спостерігача визначено однозначну залежність між об’єктами. При зміні стану одного об’єкта ( предмета) всі його залежності (обов’язкові) автоматично означені. Цей шаблон особливо корисний для реалізації систем обробки подій, таких як повідомлення, де потрібно відреагувати декілька компонентів.

Реалізація шаблону на Python

У Python можна реалізовуватися за допомогою класів та методів. Предмет зберігає список спостерігачів і надає методи для прикріплення, відпадання та їх сповіщення. Спостереження запрошують загальний інтерфейс для отримання оновлень.

Створення предметного класу

Тематичний клас керує переліком спостерігачів і надає методи їх модифікації та сповіщення.

class Subject:
 def __init__(self):
 self.observers = []

 def attach(self, observer):
 self.observers.append(observer)

 def detach(self, observer):
 self.observers.remove(observer)

 def notify(self, message):
 for observer in self.observers:
 observer.update(message)

Створення інтерфейсу спостерігача

Спостережники повинні здійснювати процес оновлення для обробки повідомлень.

class Observer:
 def update(self, message):
 raise NotImplementedError("Subclass must implement update method")

Реалізація бетонних спостерігачів

Конкретні спостерігачі визначають певні реакції на повідомлення, такі як друк повідомлення або оновлення інтерфейсу користувача.

class EmailNotification(Observer):
 def update(self, message):
 print(f"Sending email notification: {message}")

class LogNotification(Observer):
 def update(self, message):
 print(f"Logging message: {message}")

Використання системи сповіщення

Для використання системи, створення предмету, прикріпити спостерігачів, надсилати повідомлення. Ця установка дозволяє додавати або видаляти спостерігачі динамічно.

# Create subject
notification_center = Subject()

# Create observers
email_alert = EmailNotification()
log_alert = LogNotification()

# Attach observers
notification_center.attach(email_alert)
notification_center.attach(log_alert)

# Send a notification
notification_center.notify("New message received!")

Цей шаблон забезпечує гнучку та легко ширмувальну систему сповіщення. Ви можете додати нові типи повідомлень без зміни існуючого коду, що додає до відкритого принципу розробки програмного забезпечення.