观察者设计模式定义了对象间的一种一对多的依赖关系,以便一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动刷新。在现实生活中的可见观察者模式,例如,微信中的订阅号,订阅博客和QQ微博中关注好友,这些都属于观察者模式的应用。
实现:比如热水器在烧水的过程中,当水温即将烧开时,会发出报警的声音,显示器上会出现温度监控
static void Main(string[] args) { Mouse mouse = new Mouse("米奇", "黄色"); Cat cat = new Cat("米奇", "黄色", mouse); cat.CatCome(); Console.ReadKey(); }
//被观察者 class Cat { private String _name; private string _color; delegate void MyDelegate();//自定义一个委托类型,该委托可以包装一个没有返回值和参数的方法 private event MyDelegate CatComeEventHandler;//利用委托声明定义一个事件。但是委托和事件并没有本质区别,只是事件不可以在定义它的类外部 //被访问。事件,具有特殊签名的委托。 public Cat(string name, string color, Mouse mouse) { this._name = name; this._color = color; this.CatComeEventHandler += mouse.MouseRun;//注册事件,将事件指向mouse.MouseRun方法 } public void CatCome() { Console.WriteLine("名字为:" + _name + "的小猫叫了一声"); CatComeEventHandler();//利用事件调用被注册的方法。CatCome事件发生,被注册的事件也发生。这就是观察者模式。 } }
//观察者 class Mouse { private String _name; private String _color; public Mouse(string name, string color) { _name = name; _color = color; } public void MouseRun() { Console.WriteLine("名字为:" + _name + "的老鼠开始逃跑了"); } }