`
足至迹留
  • 浏览: 496821 次
  • 性别: 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
分享到:
评论

相关推荐

    观察者模式Vs事件委托Demo

    在编程领域,观察者模式(Observer Pattern)和事件委托(Event Delegation)是两种常见的设计模式,它们在处理对象间的交互和通信时起到关键作用。本文将深入探讨这两种模式的概念、工作原理及其在Java中的应用。 ...

    java观察者模式观察者模式

    这种模式也被称为发布-订阅(Publish/Subscribe)模式或者事件监听模式。 在Java中,`java.util.Observable`类和`java.util.Observer`接口提供了对观察者模式的内置支持。`Observable`类代表被观察的对象,它可以有...

    观察者模式与JavaBeans事件

    在JavaBeans中,事件处理是通过观察者模式实现的。事件源(Event Source)是发布事件的对象,而事件监听器(Event Listener)是接收并处理这些事件的对象。JavaBeans事件包括动作事件、属性更改事件等,它们通过事件...

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

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

    iOS 设计模式 观察者模式

    观察者模式,也被称为发布-订阅(Publish-Subscribe)模式,是软件设计中的一种行为模式。在iOS开发中,它是一种让多个对象监听或订阅某一个主题对象的状态变化,并在状态变化时自动收到通知的方式。这种模式使得...

    设计模式-观察者

    5. **应用实例**:观察者模式广泛应用于各种场景,如事件驱动编程、GUI组件通信、消息队列等。例如,当用户在网页上点击按钮时,按钮作为被观察者,会触发一系列事件,这些事件的监听器(观察者)会接收到通知并执行...

    观察者模式模版和例子

    3. **事件驱动**:观察者模式非常适合构建事件驱动的系统,比如GUI框架,当用户进行交互时,事件可以被广播给多个监听者。 在编程实践中,观察者模式常用于以下场景: - **GUI组件**:当用户界面中的一个元素发生...

    观察者模式在Java事件处理中的应用研究.pdf

    AWT事件处理机制使用观察者模式来处理事件,事件源(Event Source)作为被观察者,事件监听器(EventListener)作为观察者,事件监听器在事件源状态发生变化时被通知,并执行相应的操作。 本文还将讨论三种使用观察...

    设计模式之观察者模式

    5. **应用场景**:观察者模式适用于事件处理、用户界面组件、订阅/发布系统等。例如,在GUI应用中,当用户点击按钮时,按钮作为被观察者,可以通知所有监听事件的观察者,如文本框、菜单等,进行相应的响应。 在`...

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

    在Android开发中,回调模式和观察者模式是两种常见的事件处理机制,它们在软件设计模式中扮演着重要的角色,主要用于实现组件之间的通信。本文将详细探讨这两种模式,并结合Android环境进行解析。 首先,我们来理解...

    观察者模式练习

    在实际开发中,观察者模式常用于GUI组件、事件处理、发布/订阅系统等。例如,当你点击一个按钮,按钮对象(被观察者)会触发一个事件,这个事件会通知所有监听按钮的组件(观察者),如弹出对话框或执行特定操作。 ...

    java 了解观察者模式

    例如,在用户界面设计中,当用户的输入发生变化时,界面元素需要实时更新,这时就可以利用观察者模式让界面组件监听用户的输入事件。 为了在Java中实现观察者模式,首先需要创建一个继承自`Observable`的类,然后在...

    Java内置观察者模式

    观察者模式广泛应用于GUI编程、事件驱动系统、订阅-发布系统等。例如,在GUI中,按钮点击事件可以视为一个主题,多个组件可以作为观察者监听这个事件。当按钮被点击时,所有注册的组件都会接收到通知并做出响应。 #...

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

    在实际应用中,`TestNotify`可能是一个测试程序,用于演示如何在MFC中使用观察者模式进行事件监听和多窗口之间的值传递。这个程序可能包含了创建观察者和被观察者对象,添加观察者到被观察者列表,以及在消息触发时...

    观察者模式以及在Android开发中的应用

    ContentResolver提供了诸如查询、插入、更新和删除数据等方法,并且支持观察者模式,可以通过registerContentObserver方法注册ContentObserver来监听数据变更。 在Android开发中,通过ContentProvider和...

    设计模式之观察者模式Java实现

    观察者模式(Observer Pattern)是...在实际应用中,观察者模式可以用于诸如用户界面组件监听模型数据变化、订阅发布系统、事件处理框架等多种场景。通过这种方式,代码结构更加清晰,符合开闭原则,易于维护和扩展。

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

    这样,当按钮被点击(事件发生)时,不仅会执行监听器中的动作,还可以更新其他依赖于这个事件的状态,符合观察者模式的定义。 在实际项目中,监听机制和观察者设计模式常用于构建响应式的用户界面、实现业务逻辑的...

    观察者模式Demo

    观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态...另外,许多现代框架,如Spring,也支持观察者模式,使得开发者能够轻松地实现事件监听和响应。

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

    观察者模式,也被称为发布-订阅模式或事件驱动模式,是软件设计模式中的一种行为模式。这个模式的主要目的是在对象之间建立一种松散耦合的关系,使得当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并...

Global site tag (gtag.js) - Google Analytics