Примечание Другие публикации вы можете посмотреть на моем личном сайте: 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 Listobservers = 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#. Он способствует слабой связи и может быть особенно полезен в архитектурах, управляемых событиями. Поняв и реализовав этот шаблон, вы сможете писать более удобный и масштабируемый код.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3