//实现的是在手机、电脑、平板上都能够更新显示天气
abstract class Subject { private IList<Observer> observers = new List<Observer>(); //增加观察者 public void Attach(Observer observer) { observers.Add(observer); } //移除观察者 public void Detach(Observer observer) { observers.Remove(observer); } //通知 public void Notify() { foreach (Observer o in observers) { o.Update(); } } } //具体通知者 class ConcreteSubject : Subject { private string subjectState; //具体通知者状态 public string SubjectState { get { return subjectState; } set { subjectState = value; } } } abstract class Observer { public abstract void Update(); } class ConcreteObserver : Observer { private string name; //观察者名称 private string observerState; //通知内容 private ConcreteSubject subject; //通知者 public ConcreteObserver( ConcreteSubject subject, string name) { this.subject = subject; this.name = name; } //更新 public override void Update() { observerState = subject.SubjectState; Console.WriteLine("{0}的新天气状态是{1}", name, observerState); } }
private void button4_Click(object sender, EventArgs e) { ConcreteSubject s = new ConcreteSubject(); s.Attach(new ConcreteObserver(s, "手机")); s.Attach(new ConcreteObserver(s, "电脑")); s.Attach(new ConcreteObserver(s, "平板")); s.SubjectState = "晴"; s.Notify(); }