观察者模式和发布订阅模式
观察者模式与发布订阅模式的区别:
1、观察者模式中只有观察者和被观察者,发布订阅模式中有发布者、订阅者、调度中心
2、观察者模式是被观察者发生变化时自己通知观察者,发布订阅模式是通过调度中心来进行分布订阅操作
发布订阅模式
class EventBus {constructor() {this.events = {}; // 存储事件及其对应的回调函数列表}// 订阅事件subscribe(eventName, callback) {this.events[eventName] = this.events[eventName] || []; // 如果事件不存在,创建一个空的回调函数列表this.events[eventName].push(callback); // 将回调函数添加到事件的回调函数列表中}// 发布事件publish(eventName, data) {if (this.events[eventName]) {this.events[eventName].forEach(callback => {callback(data); // 执行回调函数,并传递数据作为参数});}}// 取消订阅事件unsubscribe(eventName, callback) {if (this.events[eventName]) {this.events[eventName] = this.events[eventName].filter(cb => cb !== callback); // 过滤掉要取消的回调函数}}
}
const eventBus = new EventBus()
eventBus.subscribe('add', () => {})
观察者模式
class Dom { constructor() {
// 订阅事件的观察者
this.events = {}}/** * 添加事件的观察者
* @param {String} event 订阅的事件 * @param {Function} callback 回调函数(观察者) */ addEventListener(event, callback) { if (!this.events[event]) {this.events[event] = []
} this.events[event].push(callback)} removeEventListener(event, callback) {if (!this.events[event]) {return
} const callbackList = this.events[event]const index = callbackList.indexOf(callback) if (index > -1) { callbackList.splice(index, 1) }} /**
* 触发事件 * @param {String} event */ fireEvent(event) { if (!this.events[event]) {
return
} this.events[event].forEach(callback => { callback()})
}}const handler = () => { console.log('fire click')}const dom = new Dom()dom.addEventListener('click', handler)
dom.addEventListener('move', function() {console.log('fire click2')})
dom.fireEvent('click')
相关文章:
观察者模式和发布订阅模式
观察者模式与发布订阅模式的区别: 1、观察者模式中只有观察者和被观察者,发布订阅模式中有发布者、订阅者、调度中心 2、观察者模式是被观察者发生变化时自己通知观察者,发布订阅模式是通过调度中心来进行分布订阅操作 发布订阅模式 class …...
利用ViewModel和LiveData进行数据管理
利用ViewModel和LiveData进行数据管理 1. 引言 在当今移动应用开发的世界中,数据管理是一个至关重要的方面。随着应用的复杂性不断增加,需要有效地管理和维护应用中的数据。无论是从服务器获取数据、本地数据库存储还是用户界面的状态,数据…...
前后端分离------后端创建笔记(05)用户列表查询接口(下)
本文章转载于【SpringBootVue】全网最简单但实用的前后端分离项目实战笔记 - 前端_大菜007的博客-CSDN博客 仅用于学习和讨论,如有侵权请联系 源码:https://gitee.com/green_vegetables/x-admin-project.git 素材:https://pan.baidu.com/s/…...
浅谈GIS和三维GIS的区别?
GIS(地理信息系统)和三维GIS(3D地理信息系统)是地理信息领域的两个重要概念,它们在地理数据的处理和分析方面具有不同的特点和应用。可能很多人分不清二者的区别,本文就带大家简单了解一下二者的区别。 定义…...
ArcGIS Maps SDK for JavaScript系列之三:在Vue3中使用ArcGIS API加载三维地球
目录 SceneView类的常用属性SceneView类的常用方法vue3中使用SceneView类创建三维地球项目准备引入ArcGIS API创建Vue组件在OnMounted中调用初始化函数initArcGisMap创建Camera对象Camera的常用属性Camera的常用方法 要在Vue 3中使用ArcGIS API for JavaScript加载和展示三维地…...
设计列表和超链接
在网页中,大部分信息都是列表结构,如菜单栏、图文列表、分类导航、新闻列表、栏目列表等。HTML5定义了一套列表标签,通过列表结构实现对网页信息的合理排版。另外,网页中还包含大量超链接,通过它实现网页、位置的跳转&…...
rust包跨平台编译,macbook ,linux
在 MacBook 上编译 Rust 项目并生成 Linux 包需要一些步骤。以下是一般的步骤概述: 1. **安装所需工具:** 首先,确保您的 MacBook 上已经安装了所需的工具。您需要 Rust 编程语言的工具链以及一些用于交叉编译到 Linux 的工具。 - 安装 R…...
JAVA集合-List
// 数组的缺点:每次使用都需要指定长度,掉率低,操作麻烦 // // 【java集合体系】:分类:6个接口,1个工具类 // 6个接口: 单列 :Collection,(父接口) // …...
Python|OpenCV-绘制图形和添加文字的方法(2)
前言 本文是该专栏的第2篇,后面将持续分享OpenCV计算机视觉的干货知识,记得关注。 OpenCV作为一个强大的计算机视觉功能库,除了能解决图像处理和计算机视觉任务之外,它还有着非常丰富的图像绘制功能。可以说,不论是在计算机视觉任务中标记目标领域,还是在图像上绘制一些…...
使用GO编译wasm文件并在nodejs中使用
使用GO编译wasm文件并在nodejs中使用 安装Go相关环境 # 安装GO # mac使用homebrew安装 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" brew install go# vi ~/.bashrc, 添加如下内容 e…...
BM22 比较版本号
一.双指针遍历截取 import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** 比较版本号* param version1 string字符串 * param version2 string字符串 * return int整型*/public …...
【Java】Maven配置文件帮助文档(settings.xml 和 pom.xml)
文章目录 1. settings.xml1.1 localRepository1.2 interactiveMode1.3 offline1.4 pluginGroups1.5 proxies1.6 servers1.7 mirrors1.8 profiles1.9 activeProfiles 2. pom.xml2.1 本项目信息2.2 父项目信息2.3 prerequisites2.4 issueManagement2.5 ciManagement2.6 inception…...
人脸识别技术应用安全管理规定(试行)
近年来,人脸识别技术不断成熟,已大量应用于治安管理、金融支付、门禁考勤等诸多领域,极大便捷了公众生活。然而,人脸识别技术在得到广泛应用的同时,仍存在一些不规范现象。人脸识别因其技术特点,涉及公众敏…...
FPGA应用学习-----FIFO双口ram解决时钟域+asic样机的时钟选通
60m写入异步ram,再用100M从ram中读出 写地址转换为格雷码后,打两拍和读地址判断是否空产生。相反读地址来判断是否满产生。 分割同步模块 asic时钟的门控时钟,fpga是不推荐采用门控时钟的,有很多方法移除fpga的时钟选通。 如果是a…...
zabbix案例--zabbix监控Tomcat
目录 一、 部署tomcat 二、配置zabbix-java-gateway 三、配置zabbix-server 四、配置zabbix-web界面 一、 部署tomcat tar xf apache-tomcat-8.5.16.tar.gz -C /usr/local/ ln -sv /usr/local/apache-tomcat-8.5.16/ /usr/local/tomcat cd /usr/local/tomcat/bin开启JMX…...
Electron 应用实现截图并编辑功能
Electron 应用实现截图并编辑功能 Electron 应用如何实现截屏功能,有两种思路,作为一个框架是否可以通过框架实现截屏,另一种就是 javaScript 结合 html 中画布功能实现截屏。 在初步思考之后,本文优先探索使用 Electron 实现截屏…...
前端= 结构(HTML)+ 样式(CSS)+ 行为(JavaScript)
前端开发确实涵盖了行为(JavaScript)、样式(CSS)和结构(HTML)这三个主要方面。这三个方面在前端开发中密切协作,共同构建用户界面和用户体验。 结构(Structure)ÿ…...
Flink-网络流控及反压剖析
参考: Apache Flink学习网...
redis 和 mongodb 比较
Redis和MongoDB是两种不同类型的数据库,它们在数据存储和查询方式、数据模型以及适用场景等方面有一些明显的区别。下面是Redis和MongoDB之间的一些比较: 数据模型: Redis:Redis是一个键值存储系统,支持多种数据结构如…...
Linux 主函数参数介绍
主函数如下: int main( int argc, char* argv[], char* envp[]) 参数分析如下: (1) argc 参数个数 (2) argv 参数内容,是char*类型,说明传给主函数的内容是一个一个的字符串。 (3) envp 环境变量,传给主函数的也…...
拖曳阵声纳系统技术开源情报(OSINT)综合分析
执行摘要 本报告基于印度国防研究与发展组织(DRDO)海军物理与海洋ographic实验室(NPOL)发布的ALTAS技术转让文件,结合全球开源情报,系统分析了拖曳阵声纳(Towed Array Sonar, TAS)的关键技术、开源实现、学术前沿和商业系统。情报显示,现代拖曳阵声纳技术正向双/多静…...
Wan2.2-I2V-A14B在Qt桌面程序中的应用:开发本地化视频创作工具
Wan2.2-I2V-A14B在Qt桌面程序中的应用:开发本地化视频创作工具 1. 引言:让AI视频生成触手可及 想象一下,一个普通用户无需学习复杂的命令行,只需拖拽图片、滑动几个调节条,就能轻松将静态图片变成生动的视频。这正是…...
探索Matlab在自动驾驶中的计算机视觉应用
Matlab自动驾驶,基于Matlab实现的计算机视觉代码。 计算机视觉是一门研究如何使机器“看”的科学,更进一步的说,就是是指用摄影机和电脑代替人眼对目标进行识别、跟踪和测量等机器视觉,并进一步做图形处理。 代码可正常运行在自动…...
具身Scaling Law押对了!独角兽新品1小时学会新任务,重复1800次成功率99%
克雷西 发自 凹非寺量子位 | 公众号 QbitAI机器人也开始内卷了,一位表现极其离谱的“新员工”,直接拉高了机器人的“就业门槛”。具身智能独角兽Generalist,刚刚推出了最新的研究成果——新模型Gen-1。在包装手机和折叠纸箱这些精细活儿上&am…...
当LabVIEW遇见AI:使用快马平台集成机器学习实现数据趋势预测
当LabVIEW遇见AI:使用快马平台集成机器学习实现数据趋势预测 最近在做一个工业设备状态监测的项目,需要实时预测电机振动趋势。传统LabVIEW开发虽然擅长数据采集和可视化,但加入AI预测能力一直让我头疼。直到尝试了InsCode(快马)平台&#x…...
Windows 11系统臃肿卡顿?Win11Debloat高效优化工具让系统重获新生
Windows 11系统臃肿卡顿?Win11Debloat高效优化工具让系统重获新生 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declu…...
Qwen3-ForcedAligner在嵌入式设备上的轻量化部署
Qwen3-ForcedAligner在嵌入式设备上的轻量化部署 1. 引言 语音识别技术正在从云端走向边缘,越来越多的应用场景需要在资源受限的嵌入式设备上实现实时语音处理。传统的强制对齐方案往往需要强大的计算资源,这在嵌入式环境中成为了一个巨大的挑战。 Qw…...
Linux内核中的驱动程序开发高级话题
Linux内核中的驱动程序开发高级话题 引言 驱动程序是Linux内核中负责与硬件设备交互的重要组成部分,它为操作系统和硬件之间提供了桥梁。随着硬件技术的发展和系统复杂性的增加,驱动程序开发面临着越来越多的挑战。本文将深入探讨Linux内核中驱动程序开发…...
利用快马AI快速生成系统信息查看器的安装包原型
最近在做一个系统信息查看器的小工具,需要快速生成一个可安装的软件包原型。传统方式从零开始搭建环境、写代码、打包测试,至少得折腾大半天。这次尝试用InsCode(快马)平台的AI辅助功能,没想到十分钟就搞定了完整流程。记录下这个高效的原型开…...
利用快马AI快速原型:十分钟搭建你的简易版图拉丁工具箱
最近在折腾硬件检测工具,想做个类似图拉丁吧工具箱的简易版。作为一个懒人开发者,我尝试用InsCode(快马)平台来快速实现原型验证,结果十分钟就搞定了核心功能。分享一下这个快速开发过程: 需求分析 硬件检测工具最基础的功能就是获…...
