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