Observer
Context: Define a one‑to‑many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically.
public interface IObserver{ void Update(string message);}
public class ConcreteObserver : IObserver{ private string _name; public ConcreteObserver(string name) => _name = name; public void Update(string message) => Console.WriteLine($"{_name} received: {message}");}
public class Subject{ private List<IObserver> _observers = new(); public void Attach(IObserver observer) => _observers.Add(observer); public void Notify(string message) { foreach (var o in _observers) o.Update(message); }}Real-world usage example
Section titled “Real-world usage example”Event handling in UI: Buttons notify all registered event handlers when clicked. Multiple UI elements can listen to the same data source and refresh when data changes.
Example: In .NET, INotifyPropertyChanged is used in MVVM (WPF, MAUI). System.Reactive (Rx.NET) implements observable sequences. Also, EventAggregator in Prism and IObservable<T> / IObserver<T>.