The accurate event dispatcher

准确的将事件或消息发送给观察者,避免迭代带来的性能开销。

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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值