👩‍💻 Паттерн "Наблюдатель"



Суть:

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



Простой пример — приложение, где данные обновляются, а пользователи сразу видят новые сообщения или уведомления.



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("Новая информация");




➡️ C# Ready | #теория