Создание системы уведомлений с применением паттерна Наблюдатель

В 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.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее