Суть:
Когда нужно, чтобы объект (наблюдаемый) уведомлял других (наблюдателей) об изменениях, на помощь приходит паттерн "Наблюдатель".
Простой пример — приложение, где данные обновляются, а пользователи сразу видят новые сообщения или уведомления.
1. Основы паттерна "Наблюдатель"
Он определяет отношения "один ко многим". Класс "наблюдаемый" хранит список объектов-наблюдателей и уведомляет их обо всех изменениях:
public interface IObserver
{
void Update(string data);
// Метод для уведомления
}
public class Subject
{
private List<IObserver> observers = new(); // Список наблюдателей
public void Attach(IObserver observer) => observers.Add(observer);
public void Notify(string data) => observers.ForEach(o => o.Update(data));
// Уведомление всех
}
2 .Реакция на события:
Наблюдатели подписываются на уведомления и реализуют метод Update, чтобы среагировать на изменения:
public class ConcreteObserver : IObserver
{
public void Update(string data) => Console.WriteLine($"Обновлено: {data}");
}
3. В действии:
Создаем объект Subject, добавляем пару наблюдателей и уведомляем их о новом событии.
var subject = new Subject();
var observer1 = new ConcreteObserver();
var observer2 = new ConcreteObserver();
subject.Attach(observer1);
subject.Attach(observer2);
subject.Notify("Новая информация");