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";
}
}