Csharp/C Sharp/Design Patterns/Observer Pattern

Материал из .Net Framework эксперт
Версия от 14:38, 26 мая 2010; Admin (обсуждение | вклад) (1 версия)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Observer Pattern Demo

<source lang="csharp"> using System; public delegate void ChangedEventHandler(object sender, EventArgs e); public class Subject {

   private string data;
   public event ChangedEventHandler Changed;
   public string Data {
       get { return data; }
       set {
           data = value;
           this.OnChanged(EventArgs.Empty);
       }
   }
   protected virtual void OnChanged(EventArgs e) {
       if (Changed != null)
           this.Changed(this, e);
   }
   public Subject() { }

}

public class Observer {

   private Subject data;
   private string observerName;
   public Subject ObservedObject {
       get { return data; }
       set { data = value; }
   }
   private void DataChanged(object sender, EventArgs e) {
       Console.WriteLine("Notification to {0}, {1}", observerName, data.Data);
   }
   public void Attach() {
       data.Changed += new ChangedEventHandler(DataChanged);
   }
   public void Detach() {
       data.Changed -= new ChangedEventHandler(DataChanged);
   }
   public Observer(string name) {
       observerName = name;
   }

} class Client {

   static void Main(string[] args) {
       Subject sub = new Subject();
       Observer observerA = new Observer("A Observer");
       Observer observerB = new Observer("B Observer");
       observerA.ObservedObject = sub;
       observerB.ObservedObject = sub;
       observerA.Attach();
       observerB.Attach();
       sub.Data = "1";
       observerA.Detach();
       sub.Data = "2";
   }

}

</source>