В C# простой Observer реализуется событием: источник публикует новое состояние, подписчики подключают обработчики и снимают подписку, когда она больше не нужна.
Создание системы уведомлений с применением паттерна Наблюдатель
В C# простой Observer реализуется событием: источник публикует новое состояние, подписчики подключают обработчики и снимают подписку, когда она больше не нужна.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо реализовать паттерн «Observer»: должен присутствовать объект‑источник (publisher) и несколько объектов‑слушателей (subscriber). При изменении состояния publisher каждый subscriber обязан получить соответствующее уведомление о произошедшем изменении.
Ответ
В C# простой Observer реализуется событием: источник публикует новое состояние, подписчики подключают обработчики и снимают подписку, когда она больше не нужна.
public sealed class Publisher
{
public int Value { get; private set; }
public event Action<int>? Changed;
public void SetValue(int value)
{
if (Value == value) return;
Value = value;
Changed?.Invoke(value);
}
}
// Использование внутри метода:
var source = new Publisher();
Action<int> listener = value => Console.WriteLine(value);
source.Changed += listener;
source.SetValue(7);
source.Changed -= listener;
Обычное событие вызывает обработчики синхронно. Исключение одного обработчика прерывает дальнейший вызов списка; если требуется уведомить всех независимо от ошибок, нужна отдельная политика обработки каждого слушателя. Отписка помогает избежать удержания объектов долгоживущим publisher.