Here are a few detailed real-world examples of the Observer pattern implemented in C#:
In graphical user interface (GUI) frameworks like Windows Forms or WPF, the Observer pattern is commonly used for event handling. Controls (observers) subscribe to events raised by other controls or models (subjects) to update their state or appearance accordingly.
// Subject (Publisher)
public class ButtonClickSubject
{
// Event declaration
public event EventHandler ButtonClicked;
// Method to notify observers
protected virtual void OnButtonClicked()
{
ButtonClicked?.Invoke(this, EventArgs.Empty);
}
// Method triggering the event
public void Click()
{
Console.WriteLine("Button clicked.");
OnButtonClicked();
}
}
// Observer (Subscriber)
public class ButtonObserver
{
public ButtonObserver(ButtonClickSubject subject)
{
subject.ButtonClicked += HandleButtonClicked;
}
private void HandleButtonClicked(object sender, EventArgs e)
{
Console.WriteLine("Observer: Button click event received.");
// Respond to the event here
}
}
// Example usage
public class Program
{
public static void Main()
{
ButtonClickSubject button = new ButtonClickSubject();
ButtonObserver observer = new ButtonObserver(button);
// Simulate button click
button.Click();
}
}