«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > С# | Понимание шаблона наблюдателя

С# | Понимание шаблона наблюдателя

Опубликовано 30 июля 2024 г.
Просматривать:925

C# | Understanding the Observer Pattern

Примечание
Другие публикации вы можете посмотреть на моем личном сайте: https://hbolajraf.net

Шаблон наблюдателя — это шаблон поведенческого проектирования, в котором объект, известный как субъект, поддерживает список своих зависимых объектов, называемых наблюдателями, и уведомляет их о любых изменениях состояния, обычно путем вызова одного из их методов. Этот шаблон способствует слабой связи между объектами, поскольку наблюдатели знают только об объекте, а не друг о друге. В C# этот шаблон обычно используется в программировании, управляемом событиями.

Выполнение

Давайте разберемся с шаблоном наблюдателя на подробном примере на C#.

Предметный интерфейс

Сначала мы определяем интерфейс для субъекта. Этот интерфейс будет содержать методы для регистрации, отмены регистрации и уведомления наблюдателей.

public interface ISubject
{
    void RegisterObserver(IObserver observer);
    void UnregisterObserver(IObserver observer);
    void NotifyObservers();
}

Интерфейс наблюдателя

Далее мы определяем интерфейс для наблюдателя. Этот интерфейс будет содержать метод, который субъект будет вызывать, когда ему необходимо уведомить наблюдателей.

public interface IObserver
{
    void Update();
}

Конкретный предмет

Теперь давайте реализуем конкретный предметный класс, реализующий интерфейс ISubject.

public class ConcreteSubject : ISubject
{
    private List observers = new List();

    public void RegisterObserver(IObserver observer)
    {
        observers.Add(observer);
    }

    public void UnregisterObserver(IObserver observer)
    {
        observers.Remove(observer);
    }

    public void NotifyObservers()
    {
        foreach (var observer in observers)
        {
            observer.Update();
        }
    }
}

Бетонный наблюдатель

Далее давайте реализуем конкретный класс наблюдателя, который реализует интерфейс IObserver.

public class ConcreteObserver : IObserver
{
    public void Update()
    {
        Console.WriteLine("Observer notified of state change.");
    }
}

Пример использования

Теперь давайте посмотрим, как мы можем использовать эти классы вместе.

class Program
{
    static void Main(string[] args)
    {
        ConcreteSubject subject = new ConcreteSubject();
        ConcreteObserver observer1 = new ConcreteObserver();
        ConcreteObserver observer2 = new ConcreteObserver();

        subject.RegisterObserver(observer1);
        subject.RegisterObserver(observer2);

        subject.NotifyObservers();

        subject.UnregisterObserver(observer1);

        subject.NotifyObservers();
    }
}

В этом примере ConcreteSubject является субъектом, а ConcreteObserver — наблюдателем. При вызове NotifyObservers() оба наблюдателя уведомляются об изменении состояния. После отмены регистрации одного наблюдателя уведомляется только оставшийся наблюдатель.

Что дальше?

Шаблон наблюдателя — это мощный способ реализации связи между объектами в C#. Он способствует слабой связи и может быть особенно полезен в архитектурах, управляемых событиями. Поняв и реализовав этот шаблон, вы сможете писать более удобный и масштабируемый код.

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/hbolajraf/c-understanding-the-observer-pattern-1nm6. В случае каких-либо нарушений, пожалуйста, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3