c++ Observer模式

来源:互联网 发布:js对象有private 编辑:程序博客网 时间:2024/06/03 12:39
  Observer模式应该可以说是应用最多、影响最广的模式之一,因为Observer 的一个实例Model/ Vi ew/Con trol(MVC)结构在系统开发架构设计中有着很重要的地位和意义,MVC实现了业务逻辑和表示层的解耦。个人也认为Observer模式是软件开发过程中必须要掌握和使用的模式之一。在MFC中,Doc/Vi ew(文档视图结构)提供了实现MVC的框架结构(有一个从设计模式(Observer 模式)的角度分析分析Doc/ Vi ew的文章正在进一步的撰写当中,遗憾的是时间:))。在Java 阵容中,St ru t s 则提供和MFC中Doc/Vi ew结构类似的实现MVC的框架。另外Java 语言本身就提供了Observer 模式的实现接口,这将在讨论中给出。 
   当然,MVC只是Observer 模式的一个实例。Observer 模式要解决的问题为:建立一个一(Subjec t)对多(Observer)的依赖关系,并且做到当“一”变化的时候,依赖这个“一”的多也能够同步改变。最常见的一个例子就是:对同一组数据进行统计分析时候,我们希望能够提供多种形式的表示(例如以表格进行统计显示、柱状图统计显示、百分比统计显示等)。这些表示都依赖于同一组数据,我们当然需要当数据改变的时候,所有的统计的显示都能够同时改变。Observer 模式就是解决了这一个问题。

 

   这里的目标Subj ec t 提供依赖于它的观察者Observer 的注册(Attach)和注销(Detach )操作,并且提供了使得依赖于它的所有观察者同步的操作(Notify)。观察者Observer 则提供一个Update 操作,注意这里的Observer 的Update 操作并不在Observer 改变了Subj ec t 目标状态的时候就对自己进行更新,这个更新操作要延迟到Subj ec t 对象发出Notify 通知所有Observer 进行修改(调用Update )。 

 Observer是影响极为深远的模式之一,也是在大型系统开发过程中要用到的模式之一。除了MFC、St ru t s 提供了MVC的实现框架,在Java 语言中还提供了专门的接口实现Observer模式:通过专门的类Observable 及Observer 接口来实现MVC编程模式,其UML图可以表示为:



Java 中实现MVC的UML图。 
这里的Observer 就是观察者,Observable 则充当目标Subj ec t 的角色。 Observer模式也称为发布-订阅(publish-su bscri b e ),目标就是通知的发布者,观察者则是通知的订阅者(接受通知)。