Observer模式应该可以说是应用最多、影响最广的模式之一,因为Observer的一个实例Model/View/Control(MVC)结构在系统开发架构设计中有着很重要的地位和意义,MVC实现了业务逻辑和表示层的解耦。
Observer模式要解决的问题为:建立一个“一”(Subject)对“多”(Observer)的依赖关系,并且做到当“一”变化的时候,依赖这个“一”的“多”也能够同步改变。最常见的一个例子就是:对同一组数据进行统计分析时候,我们希望能够提供多种形式的表示(例如以表格进行统计显示、柱状图统计显示、百分比统计显示等)。这些表示都依赖于同一组数据,我们当然需要当数据改变的时候,所有的统计的显示都能够同时改变。Observer模式就可以很好的解决这类问题。
在Observer模式的实现中,Subject通常都会维护一个数组作为存储其所有观察者的容器。每当Subject调用Notify操作时,就遍历这个数组中的Observer对象,Observer调用自己的Update操作以刷新显示。
Observer模式也称为发布—订阅(publish-subscribe),目标就是通知的发布者,观察者则是通知的订阅者(接受通知)。