先看看维基定义:
The observer pattern is a softeware desugn pattern in which an object, called the subject, maintains a list of its dependents, called observers, and notifes them automatically of any state changes, usually by calling one of their methods. (The observer pattern is also a key part in the familiar model-view-controller(MVC).)
观察者模式:
存在两个对象 ,主题对象 与 观察者对象, 主题对象包含一系列观察者对象。 每当主题的状态改变时,都会通过调用观察者对象中的方法来通知所有观察者对象(MVC 模式中也包含了观察者模式)。
重点: 观察者定义了对象之间的一对多依赖,一个对象改变状态,它的所有的依赖者都会收到通知并自动更新。 在程序设计时, 如果遇到一对多依赖的情况,首先要条件反射的想能否用观察者模式。
按照面向接口编程的原则, 存在主题对象、观察者对象, 则自然存在抽象主题对象以及抽象观察者对象, 静态类图如下:
以上结构图中角色如下:
在 .net 以及 jave内置了观察者模式 —— 事件。包含事件的类用于发布事件,被称为 发布器(publisher, 对应上文的 主题类), 其他接收该事件的类被称为 订阅器 (subscriber, 对应上文的 抽象观察类), 使用 发布 - 订阅 (publisher - subscriber) 模型。
简化的位置,用 委托以及事件取代 抽象观察者类:
public delegate void NotifiyEventHandler(Object sender);
// 基于委托定义事件
public Event NotifyEventHandler EventHandler;