千字带你了解什么是观察者设计模式

1.DJI-payload SDK负载开发准备和硬件连接及运行示例代码 大疆psdk开发环境 阅读详情

特点:

  • 被观察者持有监听的观察者的引用

  • 被观察者支持增加和删除观察者

  • 被观察者主题状态改变,通知观察者

  • 下面开始模拟观察者设计模式

  • 版本1:

版本1模拟的观察者设计模式,是采用了观察者持有被观察者的实例的方式。该方式存在的问题,也是比较明显: 观察者需要不断的执行,监听被观察者的状态。性能耗费比较大。

  • 版本2:

版本2模拟的观察者设计模式,是采用了被观察者持有观察者的实例的方式。该方式存在的问题,也是比较明显: 被观察者强制依赖了观察者,耦合度比较高。

  • 版本3:

版本3模拟的观察者设计模式,有了几个方面的提升: 被观察者持有监听的观察者的引用 被观察者支持增加观察者 观察者已通过MovieListener接口抽象,与被观察者的耦合性降低了。

观察者设计模式的特点: 被观察者持有监听的观察者的引用 被观察者支持增加和删除观察者 被观察者主题状态改变,通知观察者

总结: 观察者设计模式 用 “订阅”和“发布“”来理解更好 为什么呢?因为监听器这个名词听起来是一个主动的,可实际监听器是一个被动的玩意 比如我们事件源发布一个事件,然后监听器订阅了这个事件就能做出动作。 里面涉及到三个对象,事件源,事件、监听器,好好理解一下。

  • JDK的观察者设计实现:

JDK中观察者的实现: java.util.Observable 这是一个类,继承,被观察者 java.util.Observer 这是一个接口,实现,观察者 观察者impl Observer重写update方法: 当被观察者发生变化,收到通知进行具体的管理 可以随时取消

  • Spring中实现:

Spring中的Events

事件通过org.springframework.context.ApplicationEvent实例来表示。这个抽象类继承扩展了java.util.EventObject,可以使用EventObject中的getSource方法,我们可以很容易地获得所发生的给定事件的对象。这里,事件存在两种类型

  1. 与应用程序上下文相关联

  2. 所有这种类型的事件都继承自org.springframework.context.event.ApplicationContextEvent类。 它们应用于由org.springframework.context.ApplicationContext引发的事件(其构造函数传入的是ApplicationContext类型的参数)。

  3. 这样,我们就可以直接通过应用程序上下文的生命周期来得到所发生的事件:

  4. 在上下文启动时被启动ContextStartedEvent,

  5. 当它停止时启动ContextStoppedEvent,

  6. 当上下文被刷新时产生ContextRefreshedEvent,

  7. 最后在上下文关闭时产生ContextClosedEvent

  8. 与request 请求相关联 由org.springframework.web.context.support.RequestHandledEvent实例来表示,当在ApplicationContext中处理请求时,它们被引发。

Spring如何将事件分配给专门的监听器?

这个过程由事件广播器来实现,由org.springframework.context.event.ApplicationEventMulticaster接口的实现表示。此接口定义了3种方法

(1)addApplicationListener():添加新的监听器 定义了两种方法来添加新的监听器:addApplicationListener(ApplicationListener<?> listener)和addApplicationListenerBean(String listenerBeanName) 当监听器对象已知时,可以应用第一个。如果使用第二个,我们需要将bean name 得到listener对象(依赖查找DL),然后再将其添加到listener列表中

(2)removeApplicationListenerBean(String listenerBeanName):删除监听器 通过传递对象来删除一个监听器(removeApplicationListener(ApplicationListener<?> listener)或通过传递bean名称。 第三种方法,removeAllListeners()用来删除所有已注册的监听器。

(3)multicastEvent(ApplicationEvent event):将事件发送到已注册的监听器

网络攻防——kali操作系统基本使用 主要介绍如何搭建kali虚拟机,然后介绍了一个简单的攻击方法,切记,网络恶意攻击属于违法行为 阅读详情

相关推荐

航空发动机轴承故障诊断

《航空发动机主轴承故障诊断的挑战与HIT数据集研究》 摘要: 航空发动机主轴承作为关键部件,其可靠性直接影响飞行安全。然而,主轴承故障诊断面临信号信噪比低、传输路径复杂、故障类型多样、变工况运行等挑战。哈尔滨工业大学团队开发的HIT数据集为研究提供了真实工况下的实验数据,包含正常、内圈和外圈故障三种状态,具有高仿真度和强挑战性特点。研究表明,传统诊断方法在该数据集上准确率仅71-85%,突显了诊断难度。团队提出的ISONet新方法通过输入空间过参数化技术,将诊断准确率提升至99%以上,为航空发动机轴承故障诊

tyutwuxuan的博客 996

【设计模式】详解观察者模式

观察者模式是一种行为型设计模式,它定义了一种一对多的依赖关系,当一个对象的状态发生改变时,它的所有依赖者都会收到通知并自动更新。(MQ和它有点像)当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。Subject(抽象主题):也称为被观察者或可观察者,它是具有状态的对象,并维护着一个观察者列表。抽象主题角色把所有观察者对象保存在一个集合里,每个主题都可以有任意数量的观察者。

m0_51963973的博客 2981

windchill安装搭建(保姆式)

保姆式搭建windchill 材料准备 Vmware工具,用来创建和打开虚拟机的工具 安装系统的镜像文件 数据库安装文件,这里是Oracle数据库 Windchill的安装包 Vmware工具,用来安装和打开虚拟机的软件 Windowsserver2008的镜像工具,用来安装虚拟机环境的系统,如果你有win2007或win2010的也可以,在做虚拟机时,需要先安装系统。 Oracle数据库安装包 Windchill11M030的安装包 (安装包如有需要可以私信邮箱发送) 虚拟机安装 安装虚拟机VMware

tr1294937662的博客 6218

设计模式详解(十六)——观察者模式

在观察者模式中,主题是通知的发布者,它发出通知时并不需要知道谁是它的观察者,可以有任意数目的观察者订阅并接收通知。然后我们实现了具体的主题对象类 ConcreteSubject 和具体的观察者对象类 ConcreteObserver,在具体主题对象类中添加、删除和通知观察者对象,更改状态值并且通知所有的观察者对象。因此当后面更多的用户关注该公众号,只要将新的观察者加入到该公众号的用户列表中,当公众号发布新的文章时,就会统一对这些关注该公众号的用户发送通知了,实现广播通信的效果。创建主题(Subject)

qq_44307209的博客 1609

ElementUI中的el-table解决宽度问题 - 根据内容自动撑开

在使用element-ui中,会发现表格组件el-table在未指定宽度情况下,会自动计算并给表格宽度赋值。但实际开发中,有时需要根据内容实际长度自动撑开显示,由内容的多少而决定表格的宽度,而不是默认宽度为100%。在默认情况下表格宽度为100%显示,并且列项未指定宽度情况下,剩余部分会平均分配宽度,本案例实际需求是由内容自动撑开显示。componentUpdated

觉醒法师的专栏 1万+

LIS2DH三轴加速度传感器原理图设计,已量产(加速度传感器)

最近在做一款可穿戴设备原型时,选了 LIS2DH 这款加速度计 —— 比起之前常用的 ADXL345,它在低功耗和稳定性上的优化刚好戳中了可穿戴设备 “续航 + 可靠” 的核心需求。下面结合这次画的原理图,聊聊这个小模块的硬件设计细节。

不脱发的程序猿 391

设计模式详解---观察者模式

Java设计模式详解---观察者模式

stu_kk的博客 455

Dify 第 2 篇 Dify 插件离线安装

Dify是一个支持插件扩展的AI平台,其插件市场提供5种类型插件(模型、工具、Agent策略、扩展、插件包)。由于默认pip安装速度慢,可通过dify-plugin-repackaging工具将插件转换为离线包(使用阿里云镜像加速)。该工具提供两种方式:1)自备Python环境执行脚本;2)使用Docker环境(推荐)。脚本支持从Dify市场或GitHub下载插件,并重新打包为含依赖的离线包,便于通过"本地插件"方式快速安装。

甘蓝的专栏 1270

设计模式 --- 观察者模式

观察者模式(Observer Pattern)是一种行为型设计模式,用于在对象之间建立一对多的依赖关系。当一个对象(称为“主题”Subject)的状态发生改变时,所有依赖它的对象(称为“观察者”Observer)会自动收到通知并更新。这种模式的核心是解耦主题和观察者,让它们可以独立变化。核心思想主题(Subject):维护一个观察者列表,提供注册、注销和通知机制。观察者(Observer):定义统一的更新接口,当主题状态变化时被调用。主题不需要知道观察者的具体实现,只需通过接口通知。

HelloWorld 1622

uniapp - [微信小程序] 实现点击预览各种文件 pdf文档、视频mp4、mp3音乐、图片图像、word/excel/ppt 等,uniapp小程序文件预览功能(详细示例代码,一键复制开箱即用)

uniapp,uniapp微信小程序,支付宝小程序平台端,uniapp实现文件在线预览,uniapp微信小程序怎么实现预览视频mp4,mp3音乐,图片,office文档,小程序平台如何在线预览word/excel/ppt文档,uniapp实现小程序端的文件查看功能,uniapp小程序端实现pdf文件预览,uniapp纯前端预览PDF、DOC、DOCX、图片、视频,uni-app文档、图片预览查看,uniapp文档预览功能,uniapp小程序端文件预览,uniapp小程序平台纯前端解析word,pdf,xls

✅ 精选推荐文章 1万+

论文研读 Corundum: An Open-Source 100-Gbps NIC

Corundum 通过在 FPGA 上构建并行 pipeline、高效 DMA 通道、无阻塞队列结构、低延迟调度器,实现了在 PCIe Gen3 x16 接口上稳定跑满 100Gbps 吞吐量。

Double Galaxy 491

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

一个集合里,每个主题都可以有任意数量的观察者,抽象主题提供一个。者对象,在具体主题的内部状态发生改变时,给所有注册过的观察者发送。对象的引用,它存储具体观察者的有关状态,这些状态需要与具体目标保。4)ConcrereObserver:具体观察者,实现抽象观察者定义的更新接口,以便在得到。3)Observer:抽象观察者,是观察者的抽象类,它定义了一个更新接口,使得在得到。都不是主链路的功能,需要单独抽取出来,这样才能保证在后面的开发过程中保证代码。当用户单击鼠标时,订阅鼠标单击事件的函数将被调用,。

liang8999的博客 1905

深入理解Android音视频同步机制(三)NuPlayer的avsync逻辑

本文深入介绍了NuPlayer的avsync逻辑和原理

张晖的专栏 1万+

千字带你备战java开发面试

先注明:以下所有提到的博主都没给广告费。有兴趣可以来付一下嘿嘿。 所有的排序不分先后,想到哪里写到哪里。 然后就是,少看各类广告推文。实话有点贩卖焦虑了。 简历:可以用超级简历(最近好像要开始收费了。)模版可以看看拓跋阿秀(wx搜)的,他的简历也是非常的棒! 面筋可以看 0.校招去牛客wx小程序看准上也可以看 javaGuide:https://snailclimb.gitee.io/javaguide/#/ javaLearn: www.javalearn.cn wx搜:帅地玩编...

夜不滚烫 351

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

python3面向对象_Python3面向对象编程

Python3面向对象编程编辑锁定讨论上传视频《Python3面向对象编程》是2015年6月电子工业出版社出版的图书,作者是肖鹏,常贺,石琳。书名Python3面向对象编程作者肖鹏,常贺,石琳ISBN9787121262463出版社电子工业出版社出版时间2015年6月页数380字数478千字开本16(185*235)版次01-01Python3面向对...

weixin_39737368的博客 257

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

设计模式(二十)—— 观察者模式(定义、案例分析、特点、缺点)

文章目录前言正文一、定义二、情景假设三、情景分析四、 模式分析(1) 模式特点(2) 模式缺点五、使用情景六、拓展与延申总结 前言 文章内容主要参考了刘伟主编的《设计模式(第2版)》,同时也结合了自己的一些思考和理解,希望能帮到大家。 本篇讲解备忘录模式。其实非常常见,就是我们常用的撤销模式。 当我们想让系统撤销回退到系统的某一个历史状态,就需要撤销功能,要能实现撤销就必须有所保存历史状态,然后进行覆盖。 正文 一、定义 观察者模式(Observer Pattern):定义对象间的一种一对多依赖关系,使

weixin_43905387的博客 2438

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

观察者设计模式

观察者设计模式 用订阅和发布来理解更好,我想了一下是的 为什么呢?因为监听器这个名词听起来是一个主动的,可实际监听器是一个被动的玩意 比如我们事件源发布一个事件,然后监听器订阅了这个事件就能做出动作。 里面涉及到三个对象,事件源,事件、监听器,大家好好理解一下 特点: 被观察者持有监听的观察者的引用 被观察者支持增加和删除观察者 被观察者主题状态改变,通知观察者 下面开始模拟观察者设计模式...

qq_24101357的博客 2万+

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

一、什么是观察者模式 观察者定义了一种一对多的依赖关系,当一个主题(Subject)对象状态发生变化时,所有依赖它的相关对象都会得到通知并且能够自动更新自己的状态,这些依赖的对象称之为观察者(Observer)对象这类似于发布/订阅模式。 观察者模式中的主题对象,会维持着一个依赖它的观察者对象列表,当主题对象状态发生改变时,主题对象...

weixin_34260991的博客 410

设计模式之观察者设计模式

原文首发于微信公众号:jzman-blog,欢迎关注交流! 最近补一下设计模式相关的知识,关于观察者设计模式主要从以下几个方面来学习,具体如下: 什么是观察者设计模式 关键概念理解 通知观察者的方式 观察者模式的实现 观察者模式的优缺点 使用场景 下面来一张本节内容的思维导图,具体如下: 什么是观察者设计模式 观察者模式(Observer)是软件设计模式的一种,定义了对象之间一种一对多的...

weixin_33716154的博客 478

观察者模式(Observer模式)

观察者模式(Observer模式)

Greedy Hat的博客 680

设计模式之观察者模式(监听模式)

观察者模式

RichardGeek的博客 4247

设计模式——观察者模式

public class JdkDemo { public static void main(String[] args) { HashMap map = new HashMap(); for (int i = 0; i < 3000; i++) { map.put("key"+(i),"123"+i); } Set<Map.Entry> entrySet = map.entrySet();

weixin_50236329的博客 238

详解设计模式——观察者模式

目录 情景介绍 观察者模式分析 Java实现 应用场景 观察者模式:就是多个对象之间存在一对多的关系,当目标对象状态发生改变时会通知多个观察者对象作出对应改变。 情景介绍 在以前(传统模式),学生上学、大人上班之前都会观察天气预报,以确定出门是否要带雨伞。在这种情况下,因为天气随时都可能发生改变,所以学生或大人需要每隔一段时间去查看天气。这显然会消耗大量的精力,是十分...

Game_Zmh的博客 516

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

不可否认,观察者模式是JDK中使用最多的模式之一。通过了解观察者模式,至少我能够更好的梳理一对多的关系,还有对于松耦合的概念。使用观察者模式,至少我们能够切换对象在运行时是否能够被通知(更新消息等),简单来说,通过观察者模式,让我们对消息的更新更及时。引入一个很常见的案例。现在有一家气象站负责发布气象消息(WeatherData),作为不同的客户,会有不同的对于气象消息的需求,我们也就需要设计一个...

黑马小杰的博客 8507

设计模式(五)观察者模式

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

Android进阶三部曲 - 刘望舒 14万+

Java设计模式——观察者模式【Observer Pattern】

观察者设计模式

scorpio的博客 720
上一篇: 浅述设计模式之单例模式
下一篇: 避开这些坑,你能更好的创建一个基于Redis分布式锁
Java_LingFeng
博客等级 码龄4年 505粉丝 259原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值