今天学习了观察者模式
定义:
一个实体变化会影响其他实体变化
例子:
红绿灯与汽车
红绿灯是观察目标
汽车是实际观察者
灯的变化会影响车是停止还是前进。
例子:
游戏中,一个战队由若干队员组成,当其中一个受到攻击,就要通过战队中心呼叫其他队友支援。
using System.Collection abstract class Subject { //定义一个观察者集合用于存储所有观察者对象 protected ArrayList observers = new ArrayList(); //声明抽象注册方法,用于向观察者集合中增加一个观察者 public abstract void Attach(Observer observer); //声明抽象注销方法,用于在观察者集合中删除一个观察者 public abstract void Detach(Observer observer); //声明抽象通知方法 public abstract void Notify(); }
class ConcreteSubject : Subject { public override void Attach(Observer observer) { observers.Add(observer); } public override void Detach(Observer observer) { observers.Remove(observer); } //实现通知方法 public override void Notify() { //遍历观察者集合,调用每一个观察者的响应方法 foreach(object obs in observers) { ((Observer)obs).Update(); } } }
interface Observer { void Update(); } class ConcreteObserver : Observer { //实现响应方法 public void Update() { //具体更新代码 } }
调用
…… Subject subject = new ConcreteSubject(); Observer observer = new ConcreteObserver(); subject.Attach(observer); subject.Notify(); ……