美文网首页
事件模式与观察者模式

事件模式与观察者模式

作者: Crazy_Spring | 来源:发表于2019-07-29 21:55 被阅读0次

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

8129c489-e633-332b-934b-f1d02da88cd1.png

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

6969feea-7885-3dbf-863d-0608da10b4b4.png
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。

相关文章

  • 观察者模式和发布订阅模式的区别

    观察者模式和发布订阅模式最大的区别就是发布订阅模式有个事件调度中心。 在观察者模式中,观察者需要直接订阅目标事件;...

  • 事件驱动模型

    观察者模式与事件驱动模型 观察者模式: 事件驱动模型 2.事件驱动模型 事件源 持有监听器列表,或者各种类型监听器...

  • 中介者模式

    观察者与订阅/发布模式的区别 1.观察者模式中观察者必须对主题进行订阅后,才能收到主题的事件。 2.订阅/发布模式...

  • SpringBoot事件监听机制及观察者/发布订阅模式详解

    本篇要点 介绍观察者模式和发布订阅模式的区别。 SpringBoot快速入门事件监听。 什么是观察者模式? 观察者...

  • SpringBoot事件监听机制及观察者/发布订阅模式详解

    本篇要点 介绍观察者模式和发布订阅模式的区别。 SpringBoot快速入门事件监听。 什么是观察者模式? 观察者...

  • RxJava 原理篇

    一、框架思想 观察者模式观察者自下而上注入被观察者被观察者自上而下发射事件观察者模式 装饰器模式自上而下,被观察者...

  • Java - 事件处理机制

    Java - 事件处理机制 一、观察者模式 了解事件和监听,需要先了解观察者模式。 接下来介绍一个观察者模式的场景...

  • JS设计模式之发布/订阅模式、观察者模式

    1.发布/订阅模式 2.观察者模式 在观察者模式中,观察者需要直接订阅目标事件。在目标发出内容改变的事件后,直接接...

  • Spring 事件机制概述

    Spring 事件机制是观察者模式的典型应用,本文将由浅入深从观察者模式、java事件机制、Spring事件机制三...

  • 在Spring中使用事件机制

    在Spring中使用事件机制 1. 事件机制 事件机制的底层设计模式是观察者模式,观察者设计模式定义了对象间的一种...

网友评论

      本文标题:事件模式与观察者模式

      本文链接:https://www.haomeiwen.com/subject/gwtwrctx.html