问题
Observer模式应该是应用最多、影响最广的模式之一,因为Observer的一个实例Model/View/Control(MVC)结构在系统开发架构设计中有着很重要的地位和意义,MVC实现了业务逻辑和表示层的解耦。个人也认为Observer模式是软件开发过程中必须要掌握和使用的模式之一。在MFC中,Doc/View(文档视图结构)提供了实现MVC的框架结构;在JAVA阵营中,Struts则提供了和MFC中的MVC结构类似的实现MVC的框架。另外JAVA语言本身就提供了Observer模式的实现接口。
MVC只是Observer模式的一个实例。Observer模式要解决的问题为:建立一个一(Subject)对多(Observer)的依赖关系,并且做到当“一”变化的时候,依赖这个“一”的多也能够同步改变。最常见的一个例子就是:对同一组数据进行统计分析时候,我们希望能够提供多种形式的表示(例如以表格进行统计显示、柱状图统计显示、百分比统计显示等)。这些表示都依赖于同一组数据,我们当然需要当数据改变的时候,所有的统计显示都能同时改变。Observer模式就是解决了这一个问题。
结构图
Observer Pattern这里的目标Subject提供依赖于它的观察者Observer的注册(attach)和注销(detach)操作,并且提供了使得依赖于它的所有观察者同步的操作(notify)。观察者Observer则提供一个update操作,注意这里的Observer的update的操作并不在于Observer改变了Subject目标状态的时候就对自己更新,这个更新操作要延迟到Subject对象发出notify消息通知所有Observer对象进行修改(调用update)
Observer依赖于Subject
Observer模式也称为发布--订阅(publish--subscribe),目标就是通知的发布者,观察者则是通知的订阅者(接受通知)
网友评论