Publisher-Subscriber Model
- The publisher-subscriber pattern enables communication between components when a specific event occurs
- Key participants:
- Publisher: Class that defines and triggers events
- Subscriber: Class that registers for event notifications
- Event handler: Method executed when the publisher raises the event
Event Declaration
class EventPublisher
{
public delegate void NotificationHandler(string message);
public event NotificationHandler AlertTriggered;
}
Event Subscription
Multiple subscription apporaches:
// Method reference
publisher.AlertTriggered += subscriber.HandleAlert;
// Delegate instance
publisher.AlertTriggered += new NotificationHandler(subscriber.HandleAlert);
// Lambda expression
publisher.AlertTriggered += (msg) => Console.WriteLine(msg);
Event Triggering
class EventPublisher
{
public void MonitorSystem()
{
if (systemFailing)
{
AlertTriggered?.Invoke("System failure detected!");
}
}
}
Standard Event Pattern
public class SystemEventArgs : EventArgs
{
public string ErrorDetails { get; set; }
public DateTime Timestamp { get; set; }
}
class StandardPublisher
{
public event EventHandler<SystemEventArgs> SystemEvent;
protected virtual void OnSystemEvent(SystemEventArgs e)
{
SystemEvent?.Invoke(this, e);
}
}
Event Accessors
private EventHandler<SystemEventArgs> _systemEvent;
public event EventHandler<SystemEventArgs> SystemEvent
{
add
{
_systemEvent += value;
Console.WriteLine("Handler added");
}
remove
{
_systemEvent -= value;
Console.WriteLine("Handler removed");
}
}
Unsubscribing from Events
// Remove specific handler
publisher.SystemEvent -= subscriber.HandleSystemEvent;
// Remove all handlers
publisher.SystemEvent = null;