Chinaunix
标题:
Event Notifier, a Pattern for Event Notification
[打印本页]
作者:
cinc
时间:
2002-09-12 09:55
标题:
Event Notifier, a Pattern for Event Notification
[这个贴子最后由cinc在 2002/09/12 10:12pm 编辑]
基于事件的模式 设计模式中最常见的一种,本文介绍了一个发展出来的新的事件模式:
Publisher-Subscriber 模式
Event Notifier, a Pattern for Event Notification
http://www.dralasoft.com/products/eventbroker/whitepaper/
Event Nodifier 是一种由 Mediator 和 Observr 模式结合而产生的一种模式。
实际上就是 Publisher-Subscriber 模式。
模式的中心是一个 EventService,整个过程分为三步:
Subscriber 到 EventService 订阅自己感兴趣的的事件
当事件发生,Publisher 把事件发布 EventService
EventService 通知感兴趣的 Subscriber
通过 EventService 隔离了 Publisher 和 Subscriber,使他们之间的联系只是
通过事件,实现了松耦合的结构,以后加入新的Subscriber,Publisher 也不会
对系统发生影响。
可充分利用 Java 的 RTTI 属性,建立层次的事件模型。
但 EventService 成为一个单点故障点,和性能的瓶颈
本文还介绍了 这个模式在 分布式系统下的一些修改和应用
作者:
eclipse
时间:
2002-09-12 10:50
标题:
Event Notifier, a Pattern for Event Notification
事件响应可是做桌面程序的重中之重,直接影响执行效率
值得特学而大学
作者:
cinc
时间:
2002-09-12 12:44
标题:
Event Notifier, a Pattern for Event Notification
呵呵,桌面程序是事件相应模式用的挺多的一个地方。
在通常情况下,任何一个对象,如果他希望自己的状态改变让另一个(几个)对象知道,
并最此作出反映,都可以应用事件相应模式。
事件相应模式对这种情况提供了很大的灵活性。。。:)
作者:
cinc
时间:
2002-09-14 18:50
标题:
Event Notifier, a Pattern for Event Notification
[这个贴子最后由cinc在 2002/09/14 06:52pm 编辑]
这里有个 Remote Notification 的例子:股票
http://www.eli.sdsu.edu/courses/spring99/cs696/notes/rmiStock/rmiStock.html
应用了 server push 的技术,把 Observer 模式用到了 rmi 的环境中:
StockServer 是一个存放股票信息的服务器,股票的价格不定期更新,
StockWatch 是股票服务器提供的服务:
watch: StockViewer 把自己感兴趣的几只股票告诉 StockServer
cancel: StockViewer 从自己感兴趣的股票列表中去除一个 股票
StockServer接口 可以接受多个 StockViewer 的连接
当 StockServer 上的股票信息发生变化时,通知对这只股票感兴趣的 StockViewer
StockNotify 接口是 StockViewer 希望股票服务器对他做的事情:
当股票出现变化时,调用此接口的 update() 方法告诉他
由于 StockWatch 和 StockNotify 都需要远程调用,所以他们均是 Remote 的子接口
运行过程:
服务器:
1.StockServer 启动
2.StockServer
3.StockServer 把自己的 StockWatcher 接口 StockWatch 注册到 RMI,接受远程调用
客户机:
1.StockViewer 启动
2.从 RMI 服务器找到 StockServer
3.把自己感兴趣的股票告诉 StockServer
4.把自己的 StockNotify 接口 export 出去
当股票信息发生变化时:
StockerServer 根据各个 StockViewer 感兴趣的股票,发送更新给相应的人
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2