public class Subject { List<Observer> observers = new List<Observer>(); public void Attach(Observer o) { observers.Add(o); } public void Detach(Observer o) { observers.Remove(o); } public void NotifyObservers() { foreach (Observer observer in observers) { observer.Update(this); } } } public class ConcreteSubject : Subject { private string _subjectstate; public string GetSubjectState() { return _subjectstate; } public void SetSubjectState(string substate) { this._subjectstate = substate; NotifyObservers(); } } public interface Observer { void Update(Subject sub); } public class ConcreteObserver : Observer { private string ObserverState; void Observer.Update(Subject sub) { ObserverState = ((ConcreteSubject)sub).GetSubjectState(); } }
调用
static void Main(string[] args) { ConcreteObserver observer1 = new ConcreteObserver(); ConcreteObserver observer2 = new ConcreteObserver(); ConcreteObserver observer3 = new ConcreteObserver(); ConcreteSubject sub = new ConcreteSubject(); sub.Attach(observer1); sub.Attach(observer2); sub.Attach(observer3); sub.SetSubjectState("123"); }