Skip to content

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);
}
}

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