事件驱动和消息驱动

消息驱动和事件驱动很类似,都是先有一个事件,然后产生一个相应的消息,再把消息放入消息队列,由需要的项目获取。他们的区别是消息是谁产生的

消息驱动:鼠标管自己点击不需要和系统有过多的交互,消息由系统(第三方)循环检测,来捕获并放入消息队列。消息对于点击事件来说是被动产生的,高内聚。

事件驱动:鼠标点击产生点击事件后要向系统发送消息“我点击了”的消息,消息是主动产生的。再发送到消息队列中。

ps:二者都可以根据消息队列判断有没有事件,然后没有的话也都可以进入睡眠。

事件模式耦合高,同模块内好用;消息模式耦合低,跨模块好用。事件模式集成其它语言比较繁琐,消息模式集成其他语言比较轻松。事件是侵入式设计,霸占你的主循环;消息是非侵入式设计,将主循环该怎样设计的自由留给用户。如果你在设计一个东西举棋不定,那么你可以参考win32的GetMessage,本身就是一个藕合度极低的接口,又足够自由,接口任何语言都很方便,具体应用场景再在其基础上封装成事件并不是难事,接口耦合较低,即便哪天事件框架调整,修改外层即可,不会伤经动骨。而如果直接实现成事件,那就完全反过来了。

Jfinal中dreamlu的事件驱动插件Jfinal-event
准备:先新建一个插件。初始化时,扫描指定包里面的有@Listen.classannotion的类放入List中,然后从每一个监听器的泛型type中获取事件类。生成一个map容器,其中键是事件,值是监听器。然后初始化EventKit(将上面的map传入),方便接下来使用。
工作:在需要监听的地方用EventKit.postEvent(XXXEvent.class)表示发生了一个XXXEvent.class事件,然后EventKit从之前的map中通过XXXEvent.class知道有哪些监听器会监听这个事件,然后建立一个新的线程执行这些监听器的新的实例并start()

http://blog.csdn.net/haonan9122/article/details/5753842

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 121,040评论 16 134
  • (git上的源码:https://gitee.com/rain7564/spring_microservices_...
    sprinkle_liz阅读 7,091评论 8 13
  • 遇见s先生的时候,小鱼刚结束一场长长的初爱和一场短暂到分秒计算的婚姻,当然是与同一个人,所谓的纠缠不休到老死不相...
    杨小鱼的千千结阅读 157评论 0 0
  • 甜甜的,舔着嘴角的蜜汁醒来 一不小心敲碎的棒棒糖却怎么也拼不回去 想回到那个梦里 却怎么也推不开门。 群魔在天际的...
    达洱文阅读 61评论 0 0
  • 一、 既然注定不能找回,不如转过头继续前行,听到一生所爱的歌响起, 你感慨万千却再也哭不出来,竟只有无奈一笑,一生...
    王先森Beckham阅读 1,877评论 0 5