首页 > 其他分享 >观察者模式在项目中的实际应用

观察者模式在项目中的实际应用

时间:2023-07-31 22:33:21浏览次数:31  
标签:订阅 观察者 模式 事件 应用 new 监听

观察者模式观察者模式的定义:在对象之间定义一个一对多的依赖,当一个对象状态改变的时候,所有依赖的对象都会自动收到通知!

发布订阅模式是什么?

观察者模式和发布订阅模式是有一点点区别的,区别有以下几点:

  • 前者:观察者订阅主题,主题也维护观察者的记录,而后者:发布者和订阅者不需要彼此了解,而是在消息队列或代理的帮助下通信,实现松耦合。
  • 前者主要以同步方式实现,即某个事件发生时,由Subject调用所有Observers的对应方法,后者则主要使用消息队列异步实现。

Spring事件监听机制概述

SpringBoot中事件监听机制则通过发布-订阅实现,主要包括以下三部分:

  • 事件 ApplicationEvent,继承JDK的EventObject,可自定义事件。
  • 事件发布者 ApplicationEventPublisher,负责事件发布。
  • 事件监听者 ApplicationListener,继承JDK的EventListener,负责监听指定的事件。

一个完整的事件,由事件源、事件发布、事件监听三部分组成
声明事件 public class SendEmailEvent extends ApplicationEvent {

解耦 异步的左右 直接调用接口也可实现 但是不能解耦
事件发布 new publish(new VeAccountNotifyEventnotifyEvent(this,version)) 发送邮件(指令)
事件监听 @EventListener(VeAccountNotifyEventnotifyEvent event) 消费者(发送邮件)

点击确认后 (调用服务接口) new 事件发布 new publish(new VeAccountNotifyCallBackEvent(this,version)) 发送邮件(指令)
事件监听 @EventListener(VeAccountNotifyCallBackEvent event) 消费者(发送邮件)

 

标签:订阅,观察者,模式,事件,应用,new,监听
From: https://www.cnblogs.com/developS/p/17595029.html

相关文章

  • android 应用程序数据共享ContentR…
    1.实现一个ContentProvider.publicclassDataProvidersextendsContentProvider{privatestaticfinalStringDATABASE_NAME="UIDB";privatestaticfinalintDATABASE_VERSION=1;privatestaticfinalStringTABLE_NAME="UITable";......
  • HBase-HBase的特征、优缺点、应用场景
    一、Hbase的概念HBase是Hadoop的生态系统,是建立在Hadoop文件系统(HDFS)之上的分布式、面向列的数据库,通过利用Hadoop的文件系统提供容错能力。如果你需要进行实时读写或者随机访问大规模的数据集的时候,请考虑使用HBase!HBase作为GoogleBigtable的开源实现,GoogleBigtable利用GFS作......
  • 设计模式原则之:单一职责模式
     对类来说的,即一个类应该只负责一项职责。如类A负责两个不同的职责,职责1,职责2。当职责1需求变更而改变A时,可能造成职责2智行错误,所以要将类A的粒度分解为A1,A2错误的应用实例packageorg.example.demo0;/***@description:单一职责原则*@author:abel.he*@date:20......
  • android程序调用另一个android应用…
    android程序调用另一个android应用程序请求:例子:    newComponentName("com.gwsoft.player.activity","com.gwsoft.player.activity.PlayerActivity");newIntent();newBundle();"resUrl",resurl);......
  • MongoDB数据库的部署和应用
    推荐步骤:在Centos01上部署MongoDB服务器客户端登录验证在centos01的MongoDB配置文件通过配置文件控制MongoDB服务,配置MongoDB身份验证在centos01的MongoDB服务器配置身份验证管理和修改配置文件支持验证在centos01管理MongoDB管理数据,集合批量数据管理实验步骤创建管理MongoDB组和......
  • boost asio多线程模式-IOThreadPool
    今天给大家介绍asio多线程模式的第二种,之前我们介绍了IOServicePool的方式,一个IOServicePool开启n个线程和n个iocontext,每个线程内独立运行iocontext,各个iocontext监听各自绑定的socket是否就绪,如果就绪就在各自线程里触发回调函数。为避免线程安全问题,我们将网络数据封装为逻辑......
  • 欧美特应用异常,无法进入
    原因:应该是在参与人添加琪琪以后,金蝶后台更新了解决方案的方案名称,原来改应用名称的时候,金蝶并未更新解决方案的名称.解决:将科伊特.kdsln改为欧美特.kdsln 如下两截图 ......
  • 通过注册表方式启动和关闭手写输入法(方法适合各种应用)
    求:window系统下,点击输入窗口时,需要自动弹出手写输入法。点击除输入窗口外位置时,需要关闭手写输入法。实现:一、安装手写输入法插件(我选用的是搜狗输入法)这是个什么协议呢,从来没有见过啊,也只是一个a标签就可以调用起来。于是我们需要深入探讨下a标签的协议。a标签协议解读平时在......
  • 低代码在数智化时代中的应用
    随着科技的发展,企业从生产到经营中海量的数据持续被记录。数据是望远镜,发现完全不同的商业边界;数据是显微镜,判断肉眼察觉不到的消费和生活行为;数据是雷达,帮助企业提前预测未来的行为。而通过人工智能,数据的价值得到提炼,结合场景化去解决问题,就能降本增效,最终为商业带来新的活力,这就......
  • 基于端-边-云一体化架构的SkeyeVSS国标视频融合云平台在自助银行中的应用
    银行ATM功能的完善与升级,使得人们对ATM的依赖和使用度越来越高。然而ATM作为一个开放的公共环境,在服务应用中易造成各种异常情况及业务纠纷,一些不法分子也趁机利用ATM进行犯罪活动。而对于银行用户而言,提前预警、制止案件发生、避免人身、财产损失是对客户最基本的保护。如何保证AT......