论坛首页 入门技术论坛

我理解的JAVA观察者模式

浏览 3823 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-08-03   最后修改:2010-03-18
观察者模式可以参考邮件订阅的例子
邮件订阅设计到2个主要角色,一个是订阅者(观察者),一个是发布者

发布者可以拥有一个观察者的集合,可以添加,删除观察者,当发布者发布一个新的消息时,要邮件通知观察者集合中的每一个。
所以,发布者实现的接口至少应具备三个方法,即注册观察者,注销观察者,通知观察者。

通知有两种方式,一种是推(push),一种是拉(pull).
推,即发布者通过调用观察者提供的接口,来通知观察者一些变动(比如新增一个消息)。
拉,即观察者可以自主提取所要接受的数据,而不是全盘接受,主要体现在观察者程序自己主动调用观察者的传值接口,而区别于推由发布者来调用,此时,需要这个接口中的参数包含发布者对象,让程序知道扫描变动来自于哪个发布者。

JDK中内置了观察者模式,位于java.util包中,一个接口Observer,一个类Observable,将这两个类组合起来使用,既可以推,又可以拉。
一个普通的类,如果继承了Observable,就成了一个发布者,实现了Observer接口,就成了观察者。
JDK中的观察者模式有一个弊端,就是发布者需要继承一个类,而不是实现一个接口,如果需要成为发布者的类已经集成了一个类,就不能再继承Observable了。这时候,就需要自己来设计一种观察者模式了。

JDK 中Swing包中,大量运用了观察者模式,所有的组件都继承了JComponent,这就是一个发布者,它里面包含一个监听器的集合:EventListenerList,用户可以自定义一个监听器,然后添加到一个组件中的时候,该组件就会把这个监听器注册到 EventListenerList中,相当于添加了一个发布者,当用户对组件做出反应(如单击)时,相关的监听器(接受者)都会收到信息并作出反应。
   发表时间:2009-08-05   最后修改:2009-08-05
还不错 讲的很透彻 一直想找资料看看

观察着模式在j2ee电子商务网站也能用到
0 请登录后投票
   发表时间:2010-03-11  
讲得很好,lz能不能写段关于‘拉’的代码!!
0 请登录后投票
   发表时间:2010-03-12  
event listener在开发中很实用 ,可惜很多TX都之知道在UI中使用, 不会活用到Server当中去, 遗憾啊。。。
0 请登录后投票
   发表时间:2010-03-18  
解释的非常透彻,但是我想问一下 在server 中是如何使用这个观察者模式呢,怎么样才能使用。。。
0 请登录后投票
   发表时间:2010-03-18  
Server 相当于发布者, Client相当于观察者
拿B/S架构而言, Server 就是 Web应用, 保存了所有的Client(浏览器)的session。
如果需要重启服务器,就可以发布一条重启服务器的消息给client.

发消息有2中方法,推和拉,推即采取长连接的方法保持与client的通信,拉则是在客户端启动一个脚本定时器,每隔几秒主动去服务器拉数据,拉到从其服务器重启的消息,就可以通知用户了。
0 请登录后投票
   发表时间:2010-03-18  
最近在看JS 谁能说下观察者模式在JS上如何场景下应用 怎么来设计
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics