`
足至迹留
  • 浏览: 486182 次
  • 性别: Icon_minigender_1
  • 来自: OnePiece
社区版块
存档分类
最新评论

观察者模式vs事件监听模式

阅读更多
GOF设计模式中有一种叫做观察者模式(Observer),属于行为型模式。又叫发布-订阅(Publish/Subscribe)模式、模型-视图 (Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个 主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。http://zoroeye.iteye.com/blog/2100318

观察者模式被称为是模式中的皇后,而且java jdk也对它做了实现,可见该设计模式的重要位置。在图形化设计的软件中,为了实现视图和事件处理的分离,大多都采用了 Observer模式,比如java的Swing。现实的应用系统中也有好多应用,比如spring框架的初始化会触发很多事件,监听者可以根据自己订阅的事件作出自己的反应。

jdk不仅提供了Observable类、Observer接口支持观察者模式,而且也提供了EventObject类、EventListener接口来支持事件监听模式,虽然两者属于同一类型模式,都属于回调机制,主动推送消息,但使用场景有些区别。

1. 事件-监听机制
事件源经过事件的封装传给监听器,当事件源触发事件后,监听器接收到事件对象可以回调事件的方法。


2. 观察者模式
观察者(Observer)相当于事件监听者(监听器),被观察者(Observable)相当于事件源和事件,执行逻辑时通知observer即可触发oberver的update,同时可传被观察者和参数。简化了事件-监听模式的实现。


3.对比

(1) 从uml图上也可以看出,Observer的实现相对简单,event-listener需要实现三个角色,observer-observable需要实现两个角色。

(2)Observable的api已经把对观察者的注册,删除等定义好了,而且是线程安全的。而event-listener需要使用者自己实现。

(3)两者都需要自己定义并实现触发事件的通知。但Observable需要注意要在通知Observer之前调用jdk提供的setChanged()

(4)event-listener是传统的c/s界面事件模型,分事件源和事件(状态)角色,事件源要经过事件的包装、成为事件的属性之一再传递给事件监听/处理者,这个事件监听者就相当于观察者。Observer更简洁一些。两者在思想上是统一的,很多框架仍然使用了event-listener模式,比如spring框架的ApplicationEvent,ApplicationListener。
  • 大小: 11.5 KB
  • 大小: 7.1 KB
0
3
分享到:
评论

相关推荐

    设计模式-观察者模式 基于MFC实现的消息监听机制

    基于MFC实现的消息监听机制,利用了设计模式中的观察者模式,对线程间的同步做了优化,以及可以选择消息的发送类型:同步或异步发送。对于监听者而言在注册监听的同时可以选择监听的消息类型,避免了发送者发送的...

    java中监听机制,以及观察者设计模式

    详细讲解了java中的监听机制以及观察者设计模式

    java事件监听模式实现万能事件总线.zip

    Java简单几个类实现万能事件总线,采用享元模式和监听器模式。 使用方法很简单,直接EventCenter.get()....上面只是举例,很像观察者模式,实际上并非简单的观察者模式,有很多定制化的功能,之间可以代码里的注释。

    Android,设计模式,观察者模式

    通过一个小的Android应用,学习一下设计模式之观察者模式;观察者模式定义对象间一种一对多的依赖关系,使得当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。这里演示了通过改变一个数值来改变...

    内容观察者模式运用

    在实现一些复杂的事件监听的时候,项目里会用到内容观察者模式,自定义内容观察者

    javascript观察者模式Watch.JS.zip

    以往我们使用javascript实现的观察者模式都是通过使用回调函数配合dom上的event事件来操作的,而“Watch.js”可以为javascript的对象实现观察者模式,监听对象的变化。用麻雀虽小五脏俱全来描述Watch.js比较合适。...

    设计模式之观察者模式(Observer)

    观察者模式(Observer) 用意:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一主题对象。

    观察者模式实例图解,相信可以帮助大家理解

    这是我在学习工程中自己对这个模式的理解,大家可以看看

    观察者模式本质实例DEMO

    针对所有涉及的,监听者模式,观察者模式,订阅者模式的举例介绍,让大家更清晰的理解这几种模式的本质

    使用MFC实现观察者模式(Observer)同时兼顾多窗口之间传值

    在观察者模式下使用MFC实现的消息监听,可以选择同步或者异步传递消息。监听者可以选择监听的消息类型以及发送者,发送者无需关心监听者是谁。

    观察者模式高级应用

    附件是个观察者模式高级应用地demo,实现了事件分发机制,例如当创建一个新用户后,发送创建用户地事件,事件总线里面有对创建用户地事件监听地监听器就会得到相应地执行,比较适合那种当一个对象改变状态,依赖它的...

    深入探索Spring事件监听机制:技术与应用

    这种机制基于观察者模式,由事件(ApplicationEvent)、事件监听器(ApplicationListener)和事件广播器(ApplicationEventMulticaster)三个主要组成部分构成。 事件是发生的动作或事情,其核心是ApplicationEvent...

    C#设计模式(17)——观察者模式(Observer Pattern).pdf

    从生活中的例子可以看出,只要对订阅号... 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己的行为。

    设计模式之观察者模式1

    设计模式之观察者模式介绍观察者模式又叫发布订阅模式(Publish/Subscribe),它定义了一种一对多的关系,让多个观察者对象同时监听某一个主题对象,这个

    06-让观察者监听事件(1).html

    观察者模式( Observer ) 迭代子模式( Iterator ) 责任链模式( Chain of Responsibility ) 命令模式( Command ) 备忘录模式( Memento ) 状态模式( State ) 访问者模式( Visitor ) 中介者模式( ...

    Android使用观察者模式Observer实现网络状态监听

    主要为大家详细介绍了Android使用观察者模式Observer实现网络状态监听,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    Android监听——回调模式与观察者模式

    说明: http://blog.csdn.net/yangzhaomuma/article/details/50967851

    java内置观察者模式

    java内置的观察者模式,用于日后复习查阅。

    浅谈Android设计模式学习之观察者模式

    观察者模式又被称作发布/订阅模式,观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自

Global site tag (gtag.js) - Google Analytics