Observer Pattern
Observer pattern is based on the Publisher/Subscribers concept. There is one-to-many relationship. Many subscribers are registered or subscribed to one publisher. Whenever any change occurs in publisher, all of the subscribers, who are registered to it, are notified about the change.
Observer Pattern Example
Here is an example of News Agency system. News agency works as publisher while News readers work as subscribers. Whenever new news comes in then all of the news readers subscribed to it, get notified and receive the news.


public interface IObservable { void Subscribe(IObserver observer); void Unsubscribe(IObserver observer); void NotifyChanges(); }
public class NewsAgency : IObservable { private Listobservers; private string latestHeadline; public NewsAgency() { observers = new List (); latestHeadline = string.Empty; } public void Subscribe(IObserver observer) { if (observer != null) { this.observers.Add(observer); } } public void Unsubscribe(IObserver observer) { if (observer != null) { this.observers.Remove(observer); } } public void NotifyChanges() { if (this.observers != null && this.observers.Count > 0) { foreach(IObserver observer in this.observers) { observer.Update(this.latestHeadline); } } } public void SetNewHeadline(string newHeadline) { this.latestHeadline = newHeadline; NotifyChanges(); } }
public interface IObserver { void Update(string latestHeadline); }
public class NewsReader : IObserver { private NewsAgency newsAgency; private string latestNewsReceived; private string nameOfNewsReader; public NewsReader(NewsAgency newsAgency, string nameOfNewsReader) { this.newsAgency = newsAgency; this.newsAgency.Subscribe(this); this.latestNewsReceived = string.Empty; this.nameOfNewsReader = nameOfNewsReader; } public void Update(string latestHeadline) { this.latestNewsReceived = latestHeadline; } public void DisplayNews() { Console.WriteLine("Latest Headline for "+this.nameOfNewsReader+" : " + this.latestNewsReceived); } }
namespace ObserverPatternDemo { class Program { static void Main(string[] args) { NewsAgency newsAgency = new NewsAgency(); NewsReader newsReaderX = new NewsReader(newsAgency,"Reader X"); NewsReader newsReaderY = new NewsReader(newsAgency, "Reader Y"); newsAgency.SetNewHeadline("Welcome to OmerJaved.com!"); newsReaderX.DisplayNews(); newsReaderY.DisplayNews(); Console.ReadKey(); } } }
Observer Pattern Example Output
