Observer Pattern

  1. public class Subject  
  2.     {  
  3.         List<IObserver> _subjects = new List<IObserver>();  
  4.         string _message = string.Empty;  
  5.         public void Subscribe(IObserver Subject)  
  6.         {  
  7.             _subjects.Add(Subject);  
  8.         }  
  9.         private void NotifySubscriber()  
  10.         {  
  11.             _subjects.ForEach(subject => subject.UpdateState());  
  12.         }  
  13.         public string GetMessage()  
  14.         {  
  15.             return _message;  
  16.         }  
  17.         public void SetMessage(string Message)  
  18.         {  
  19.             _message = Message;  
  20.             NotifySubscriber();  
  21.         }  
  22.     }  
  23.   
  24.     public interface IObserver  
  25.     {  
  26.         Subject subject { getset; }  
  27.         void UpdateState();  
  28.     }  
  29.   
  30.     public class Subscriber1 : IObserver  
  31.     {  
  32.         public Subscriber1(Subject OSubject)  
  33.         {  
  34.             this.subject = OSubject;  
  35.             this.subject.Subscribe(this);  
  36.         }  
  37.         public Subject subject { getset; }  
  38.   
  39.         public void UpdateState()  
  40.         {  
  41.             Console.WriteLine("Subscriber 1 is notified with value: " + subject.GetMessage());  
  42.         }  
  43.     }  
  44.     public class Subscriber2 : IObserver  
  45.     {  
  46.         public Subscriber2(Subject OSubject)  
  47.         {  
  48.             this.subject = OSubject;  
  49.             this.subject.Subscribe(this);  
  50.         }  
  51.         public Subject subject { getset; }  
  52.   
  53.         public void UpdateState()  
  54.         {  
  55.             Console.WriteLine("Subscriber 2 is notified with value: " + subject.GetMessage());  
  56.         }  
  57.     }  
  58. //Consume Observer pattern  
  59.             Subject oSubject = new Subject();  
  60.   
  61.             Subscriber1 osub1 = new Subscriber1(oSubject);  
  62.             Subscriber2 osub2 = new Subscriber2(oSubject);  
  63.   
  64.             Console.WriteLine("====This is a test message 1====");  
  65.             oSubject.SetMessage("First message from Subject");  
  66.             Console.WriteLine("====This is a test message 2====");  
  67.             oSubject.SetMessage("Second message from Subject");  
  68.             Console.ReadLine();