首页 > 其他分享 >项目中的观察者模式

项目中的观察者模式

时间:2023-04-15 21:23:21浏览次数:29  
标签:项目 观察者 模式 消息 注册 Subject

背景

目前开发的项目中,出现过许多次观察者模式,且其和普通的观察者模式有些许不同,为了理解而进行整理。

项目中的观察者模式

类图:

项目中的观察者模式

流程:脚本订阅消息队列消息,创建Subject,传送解析后的消息给所有观察者,观察者根据消息类型判断是不是自己关心的消息,是的话就把自己注册到Subject中;Subject的notifyObservers方法让观察者格式化消息后doUpdate(如更新db、发送建库消息给消息队列等)。

普通的观察者模式流程:Subject创建出来后,对具体的Subject感兴趣的观察者会注册在它上面,Subject发生变化时唤醒观察者执行操作。

项目中的观察者模式和普通观察者模式的区别在于:项目中的观察者模式的Subject只有一个,发给每个观察者的消息都是一样的,由观察者来决定是否要注册到该Subject上;普通观察者模式的Subject有多个,注册在某个Subject上的观察者一定是对变化感兴趣的,不然就没必要注册。

为什么项目中的观察者要这么设计呢?如果按照普通观察者模式来设计,由于项目中有100多个维度的数据,那么需要创建100多个具体的Subject,且其订阅的消息队列需要分出100多个不同topic或queue,开发和维护成本很高,所以选择只创建一个Subject,由观察者(每个观察者关注多种类型)决定是否进行注册。

总结

设计模式并不是一成不变的,根据项目的需要进行调整,即所谓的因地制宜、因材施教。

标签:项目,观察者,模式,消息,注册,Subject
From: https://www.cnblogs.com/sjmuvx/p/17321899.html

相关文章

  • scrum项目冲刺_Day4会议总结
    今日团队任务:图片转excel(5天)前端开发(需团队风格统一)调用接口(后端),json数据->excel前后端连接           任烁玚(进行中)            图片转html(8天)前端开发(需团队风格统一)图片转为pdf(存储)pdf转html(调用接口)[html存储到数据库]前后台数据同......
  • spring boot创建非web项目
    我们如何启动一个main方法去运行它呢使用也非常简单,我们只需要对springboot生成的代码做略微的修改即可。使用SpringApplicationBuilder来创建SpringApplication,并且配置WebApplicationType为NONE,这样即使有tomcat依赖也不会创建httpserver,执行run方法之后我们就得到了spring......
  • FTP数据连接既可能是客户端发起的,也可能是服务器端发起的 主动传输模式和被动传输模式
    主动传输模式和被动传输模式在FTP协议中,控制连接使用周知端口21。相反,数据传输连接的目的端口通常实现无法知道。FTP协议使用一个标准的端口21作为ftp-data端口,但是这个端口只用于连接的源地址是服务器端的情况,在这个端口上根本就没有监听进程。FTP的数据连接和控制连接的方向一般......
  • 08.项目成本管理
    1.成本管理1.1.概述项目成本概念及其构成:项目全过程所耗用的各种成本的总和为项目成本项目成本管理作用和意义:项目成本管理就是要确保在批准的预算内完成项目项目成本失控的原因:1、对工程项目认识不足2、组织制度不健全3、方法问题4、技术的制约5、需求管理不当相关......
  • 介绍ServiceSelf项目
    ServiceSelf做过服务进程功能的同学应该接触过Topshelf这个项目,它在.netframework年代神一搬的存在,我也特别喜欢它。遗憾的是在.netcore时代,这个项目对.netcore程序的支持没有跟进,最近项目也存档停止更新了。我在开源的一些工具里实现放了自安装和卸载服务的功能的代码,本着够用......
  • 浅谈-api项目设计(上)
    从事api后端接口开发也有五六年时间了,都没有好好的整理下api项目架构模板以及如何从零开始设计。抽空写个文章记录下,顺便检查下自己对这块的理解,如有不正确的地方,欢迎底下友好交流。本文的目的是检查自己对架构设计的理解,思考架构设计的意义和常用的设计思想按照软件工程流程。......
  • 项目连接讯飞语音接口的相关操作
    相关操作在讯飞官网找到了这样一个语音听写模件,然后自己尝试着调用了这个语音接口,幸运地,成功调用到了这个语音接口,但是这个调用仅仅是在Java里面实现了,并没有实现在web里面,后续还会继续完善这个调用的!具体步骤1、进入到讯飞平台官网:https://www.xfyun.cn/选择注册一个帐号之后......
  • springboot项目打成jar包后 ,配置文件加载的优先级顺序
    SpringBoot会按照以下顺序来加载配置文件:1、内置默认值:SpringBoot会首先加载内置的默认值,这些默认值定义在SpringBoot的代码中,例如,内置的默认端口号为8080。2、应用级别的配置文件:SpringBoot会从以下位置加载应用级别的配置文件,这些位置按照优先级逐一检查:当前目录下的/c......
  • docker:Dockerfile、docker私有仓库、dockercompose介绍、dockercompose部署flask+redi
    目录一、Dockerfile1.1常用和不常用命令1.2dockerfile构建一个djagno项目二、docker私有仓库2.1镜像传到官方仓库2.2镜像分层2.3私有仓库搭建三、dockercompose介绍四、dockercompose部署flask+redis项目4.1新建flask项目app.py4.2编写Dockerfile--》用于构建flask项目的......
  • docker,Dockerfile,docker私有仓库,dockercompose介绍,dockercompose部署flask+redis项目,d
    内容回顾容器操作dockerstart容器id启动容器dockerstop容器id停止容器dockerrm 容器id删除容器ockerrm`dockerps-aq`#正在运行的容器不能删除dockerexec容器id命令让容器执行命令dockercp宿主机目录容器id:容器目录#目录要存在dockercp容......