论坛首页 Java企业应用论坛

The accurate event dispatcher

浏览 3049 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-12-23  
准确的将事件或消息发送给观察者,避免迭代带来的性能开销。

1)OringinalObservable
事件源
2)AccurateDispatcher
该类能够将事件或消息准确的发送到关心者。通过Hash 或其它方式寻找关心者,而不是通过迭工的 方式查找。
3)ConcreteObserver
事件或消息的关心者。

java 代码
  1. public class AccurateDispatcher implements IListener {
  2.    protected void dispatchAccurately(Event event) {
  3.      IListener handler = getEventHandler(event);
  4.      handler.doSomething(event);
  5.   } 
  6.    public void addEventListener(IListener l) {
  7.      //Add the listener
  8.   }
  9.    public void removeEventListener(IListener l) {
  10.      //Remove the listener
  11.   }
  12.    protected IListener getEventHandler(Event event) {
  13.      // Find the handler with hash arithmetic and the parameters in the
  14.      // event.
  15.      return null;
  16.   }
  17.   public void doSomething(Event event) {
  18.    dispatchAccurately(event);
  19.   }
  20. }

模式应用<o:p></o:p>

<o:p> </o:p>

EMS/OMC中都会有告警(它是网管系统中的概念),在前端(在C/S构架中的客户端)告警的观察者会很多,少则几千,多则几万都有可能,所以如果当一条告警产生时,并且该告警只有一个或几个观察者(多个观察者可以使用Observer Composite模式),如果通过迭代的方式进行传播,性能会很差,如果使用Accurate event dispatcher 则可以大大的减少性能开销。

当然,使用该模式的前提是:1)消息的观察者可以通过消息中的属性能够定位;2)消息的观察者不是所有已经注册的观察者。

<o:p> </o:p>

模式的延伸<o:p></o:p>

1) The second event dispatcher

JMS 应用开发时,如果注册太多JMSListener 可能会使用一条消息,这样我们可以通过二级事件派发者,进行再次转发。二级事件派发者,可以按照事件的业务类型进行分类,这样可以在二级事件派发者对事件派发的性能进行优化或者容错处理。也可以提高JMS事件的派发性能。

2) The observer composite

该模式Second Event Dispatcher的一种特殊应用。

参考<o:p></o:p>

1) Event Aggregator (http://martinfowler.com/eaaDev/EventAggregator.html)
  • 大小: 14.8 KB
  • 大小: 10.9 KB
  • 大小: 6.8 KB
   发表时间:2007-12-25  
lz你说的就是观察者模式阿。
0 请登录后投票
   发表时间:2007-12-26  
是对观察者模式的一种补充,
0 请登录后投票
论坛首页 Java企业应用版

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