Pattern: Observer
Description
Observer pattern is a behavioral design pattern that defines a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically.
Example in .NET :
Observer
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | using System.ComponentModel; using System.Runtime.CompilerServices; namespace Observer; /// <summary> /// INotifyPropertyChanged is an interface that provides a mechanism for the object to notify clients that a property value has changed. /// </summary> public class Person: INotifyPropertyChanged { private string name= string .Empty; public string Name { get => name; set { if (name == value) return ; name = value; OnPropertyChanged(); } } public event PropertyChangedEventHandler? PropertyChanged; protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = "" ) { PropertyChanged?.Invoke( this , new PropertyChangedEventArgs(propertyName)); } } internal class ObserverDemo { public static void Demo() { Person person = new (); //subscribe to the event to observe the changes person.PropertyChanged += (sender, args) => { var p = sender as Person; Console.WriteLine($ "Property {args.PropertyName} changed to {p?.Name}" ); }; person.Name = "Andrei Ignat" ; } } |
Learn More
Source Code for Microsoft implementation of Observer
SourceCode INotifyPropertyChanged
Learn More
}
Homework
Imagine you have a logger that logs to a file and to a console. Implement an observable logger that will allow you to subscribe to the logger and to be notified when the logger logs a message.
Leave a Reply