前端设计模式之【观察者模式】
文章目录
- 前言
- 介绍
- 实现
- 优缺点
- 应用场景
- 后言
前言
hello world欢迎来到前端的新世界
😜当前文章系列专栏:前端设计模式
🐱👓博主在前端领域还有很多知识和技术需要掌握,正在不断努力填补技术短板。(如果出现错误,感谢大家指出)🌹
💖感谢大家支持!您的观看就是作者创作的动力
介绍
观察者模式又称发布-订阅模式(Publish/Subscribe Pattern),是我们经常接触到的设计模式,日常生活中的应用也比比皆是,比如你订阅了某个博主的频道,当有内容更新时会收到推送;又比如JavaScript中的事件订阅响应机制。观察者模式的思想用一句话描述就是:被观察对象(subject)维护一组观察者(observer),当被观察对象状态改变时,通过调用观察者的某个方法将这些变化通知到观察者。
实现
观察者模式中Subject对象一般需要实现以下API:
- subscribe(): 接收一个观察者observer对象,使其订阅自己
- unsubscribe(): 接收一个观察者observer对象,使其取消订阅自己
- fire(): 触发事件,通知到所有观察者
// 被观察者
function Subject() {this.observers = [];
}Subject.prototype = {// 订阅subscribe: function (observer) {this.observers.push(observer);},// 取消订阅`在这里插入代码片`unsubscribe: function (observerToRemove) {this.observers = this.observers.filter(observer => {return observer !== observerToRemove;})},// 事件触发fire: function () {this.observers.forEach(observer => {observer.call();});}
}
验证是否订阅成功
const subject = new Subject();function observer1() {console.log('Observer 1 Firing!');
}function observer2() {console.log('Observer 2 Firing!');
}subject.subscribe(observer1);
subject.subscribe(observer2);
subject.fire();//输出:
Observer 1 Firing!
Observer 2 Firing!
验证一下取消订阅是否成功:
subject.unsubscribe(observer2);
subject.fire();//输出:
Observer 1 Firing!
优缺点
优点
- 支持简单的广播通信,自动通知所有已经订阅过的对象
- 目标对象与观察者之间的抽象耦合关系能单独扩展以及重用
- 增加了灵活性
- 观察者模式所做的工作就是在解耦,让耦合的双方都依赖于抽象,而不是依赖于具体。从而使得各自的变化都不会影响到另一边的变化。
缺点
过度使用会导致对象与对象之间的联系弱化,会导致程序难以跟踪维护和理解
应用场景
- DOM事件
document.body.addEventListener('click', function() {console.log('hello world!');
});
document.body.click()
后言
创作不易,要是本文章对广大读者有那么一点点帮助 不妨三连支持一下,您的鼓励就是博主创作的动力
相关文章:
前端设计模式之【观察者模式】
文章目录 前言介绍实现优缺点应用场景后言 前言 hello world欢迎来到前端的新世界 😜当前文章系列专栏:前端设计模式 🐱👓博主在前端领域还有很多知识和技术需要掌握,正在不断努力填补技术短板。(如果出现错误&#…...
HTTPS安全相关-通信安全的四个特性-ssl/tls
230-TLS是什么 1.http不安全 由于 HTTP 天生“明文”的特点,整个传输过程完全透明,任何人都能够在链路中截获、修改或者伪造请求 / 响应报文,数据不具有可信性 ; “代理服务”。它作为 HTTP 通信的中间人,在数据上下…...
并查集:Leetcode765 情侣牵手
n 对情侣坐在连续排列的 2n 个座位上,想要牵到对方的手。 人和座位由一个整数数组 row 表示,其中 row[i] 是坐在第 i 个座位上的人的 ID。情侣们按顺序编号,第一对是 (0, 1),第二对是 (2, 3),以此类推,最后…...
如何设计一个网盘系统的架构
1. 概述 现代生活中已经离不开网盘,比如百度网盘。在使用网盘的过程中,有没有想过它是如何工作的?在本文中,我们将讨论如何设计像百度网盘这样的系统的基础架构。 2. 系统需求 2.1. 功能性需求 用户能够上传照片/文件。用户能…...
【代码随想录】算法训练计划17
1、 110.平衡二叉树 题目: 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 思路: 经典后序遍历,感…...
“护肤品销售策略:从“免费拼团”到“3人回本大放送”“
有一个销售护肤品的团队,他们家399块钱一套的护肤品,他们在小程序这一个渠道,只用了23天的时间,就卖出去了2000多万的营业额,你敢信吗? 那么23天的时间,他们是怎么卖出去2000多万的呢࿱…...
uniapp和vue3+ts开发小程序,使用vscode提示声明变量冲突解决办法
在uniapp中,我们可能经常会遇到需要在不用的环境中使用不同变量的场景,例如在VUE3中的小程序环境使用下面的方式导入echarts: const echarts require(../../static/echarts.min); 如果不是小程序环境则使用下面的方式导入echartsÿ…...
CCLink转Modbus TCP网关_MODBUS报文配置
兴达易控CCLink转Modbus TCP网关是一种功能强大的设备,可实现两个不同通信协议之间的无缝对接。它能够将CCLink协议转换为Modbus TCP协议,并通过报文配置实现灵活的通信设置。兴达易控CCLink转Modbus TCP网关可以轻松实现CCLink和Modbus TCP之间的数据转…...
【开源】基于Vue.js的大学兼职教师管理系统的设计和实现
目录 一、摘要1.1 项目介绍1.2 项目详细录屏 二、研究内容三、界面展示3.1 登录注册3.2 学生教师管理3.3 课程管理模块3.4 授课管理模块3.5 课程考勤模块3.6 课程评价模块3.7 课程成绩模块3.8 可视化图表 四、免责说明 一、摘要 1.1 项目介绍 大学兼职教师管理系统࿰…...
Mysql数据库 14.SQL语言 视图
一、视图的概念 视图:就是由数据库中一张或多张表根据特定的条件查询出的数据狗造成的虚拟表 二、视图的作用 安全性,简单性 三、视图的语法 语法 create view 视图表 as select_statement; 代码实现 #创建视图 将查询结果创建称为视图&#x…...
【Acwing171】送礼物(双向dfs)题解
本题思路来源于acwing算法提高课 题目描述 看本文需要准备的知识 1.二分(强烈推荐文章:一分钟学会二分模板 2.dfs基本思想,了解“剪枝”这个术语 思路分析 首先这道题目看起来就是一个01背包,但是如果直接用01背包去做&…...
机器学习---多分类SVM、支持向量机分类
1. 多分类SVM 1.1 基本思想 Grammer-singer多分类支持向量机的出发点是直接用超平面把样本空间划分成M个区域,其 中每个区域对应一个类别的输入。如下例,用从原点出发的M条射线把平面分成M个区域,下图画 出了M3的情形: 1.2 问题…...
玩转Linux基本指令
> 作者简介:დ旧言~,目前大二,现在学习Java,c,c,Python等 > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:牢记Linux的基本指令。 > 毒鸡汤:挫…...
【开源分享】国内可用的免费安卓GPT语音助手 - 可音量键唤起,可联网
写在前面:这是一个我写的开源GPT语音助手,不收钱,只求Star! 简要介绍 这是一个基于ChatGPT的安卓端语音助手,允许用户通过手机音量键从任意界面唤起并直接进行语音交流,用最快捷的方式询问并获取回复 使用效果 一、基…...
什么是安全平行切面
安全平行切面的定义 通过嵌入在端—管—云内部的各层次切点,使得安全管控与业务逻辑解耦,并通过标准化的接口为安全业务提供内视和干预能力的安全基础设施。安全平行切面是一种创新的安全体系思想,是实现“原生安全”的一条可行路径。 为什…...
Git 入门使用 —— 建库、代码上下传、常用命令
目录 一、Git 入门 1.1 Git简介 1.2 Git安装 1.3 创建码云仓库 二、Git 使用 2.1 git初始化操作 2.2 代码上传 2.3 代码下载 2.4 代码更新 2.4.1 仓库管理者 2.4.1 仓库使用者 三、Git 常用命令 一、Git 入门 1.1 Git简介 Git是一个开源的分布式版本控制系统&am…...
HTML5学习系列之简单使用1
HTML5学习系列之简单使用1 前言基础显示学习定义网页标题定义网页元信息定义网页元信息定义文档结构div元素di和classtitlerole注释 总结 前言 下班加班期间的简单学习。 基础显示学习 定义网页标题 <html lang"en"> <head> <title>从今天开始努…...
计算机网络第一章(计算机网络开篇)
目录 一.什么是计算机网络1.0 何为计算机网络1.1 什么是Internet?1.2 互联网与互连网1.3 互联网基础结构发展的三个阶段 二.什么是网络协议2.1 协议的三要素2.2 internet协议标准 三. 互联网的组成3.1 边缘部分3.11 端系统之间的通信 3.2 核心部分3.21 数据交换技术 四. 计算机…...
百度秋招突击手册面试算法题:三数之和
给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。 示例 …...
归并排序 图解 递归 + 非递归 + 笔记
前置知识:讲解019-算法笔试中处理输入和输出,讲解020-递归和master公式 (1)左部分排好序,右部分排好序,利用merge过程让左右整体有序(2)merge过程:谁小拷贝谁,直到左右两部分所有的数字耗尽(3)递归实现和非递归实现(4…...
深度拆解Muduo库的Reactor模型实现与线程间协作机制
1. Muduo库与Reactor模型基础 第一次接触Muduo库时,我被它简洁高效的代码风格所吸引。作为C高性能网络库的代表作,Muduo采用了经典的Reactor模式来处理高并发网络请求。简单来说,Reactor模式就像是一个高效的"事件分发器"ÿ…...
【IEEE出版、中南大学主办】第七届计算机视觉、图像与深度学习国际学术会议(CVIDL 2026)
第七届计算机视觉、图像与深度学习国际学术会议(CVIDL 2026)定于2026年5月22-24日在中国 长沙隆重举行。会议旨在为从事计算机视觉、图像与深度学习研究的专家学者、工程技术人员、技术研发人员提供一个共享科研成果和前沿技术,了解学术发展…...
从CCF A类清单看计算机学科前沿:如何选择你的学术发表阵地
1. CCF A类清单:计算机学术圈的"米其林指南" 第一次看到CCF A类清单时,我正为博士开题选方向发愁。导师甩给我这份列表说:"这就是计算机学界的米其林三星榜单,发一篇能顶三篇普通论文。"后来我才理解&#x…...
模拟社会:在虚拟环境中训练AI Agent
模拟社会:在虚拟环境中训练AI Agent 关键词:多智能体强化学习(MARL)、社会模拟引擎、认知架构涌现、通用人工智能(AGI)预训练、社会契约理论AI化、零样本社会能力迁移、仿真伦理对齐 摘要 从AlphaGo在棋盘上的单一博弈胜利,到GPT系列在语言符号上的通用能力涌现,人工…...
StarUML 4.0 导出高清无痕图片的逆向工程实践
1. StarUML水印问题的由来与影响 第一次用StarUML导出设计图时,那个醒目的"Unregistered"水印简直让我崩溃。作为一款专业的UML建模工具,StarUML在未注册状态下会在导出的所有图片上添加这个标识,严重影响图表在正式文档和演示中的…...
从Ptolemaic到Copernican模型:Statistical Rethinking 2023中的模型进化
从Ptolemaic到Copernican模型:Statistical Rethinking 2023中的模型进化 【免费下载链接】stat_rethinking_2023 Statistical Rethinking Course for Jan-Mar 2023 项目地址: https://gitcode.com/gh_mirrors/st/stat_rethinking_2023 Statistical Rethinkin…...
cv_unet_image-colorization效果实测:不同分辨率黑白图上色一致性分析
cv_unet_image-colorization效果实测:不同分辨率黑白图上色一致性分析 1. 项目背景与测试目的 黑白照片上色一直是图像处理领域的热门应用,无论是老照片修复还是艺术创作,都希望能将黑白影像转化为生动的彩色画面。今天我们要评测的是基于U…...
通过GitLab API动态触发特定Job并传递参数
在持续集成和持续交付(CI/CD)流程中,灵活地触发特定Job并传递参数是一个常见需求,尤其是在需要根据不同的环境或参数来调整执行逻辑的时候。本文将探讨如何通过GitLab的API调用来实现这一目标。 背景介绍 假设我们有一个项目myproject,其中有一个.gitlab-ci.yml文件定义…...
终极Windows风扇控制指南:3步实现智能散热与静音平衡
终极Windows风扇控制指南:3步实现智能散热与静音平衡 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/…...
MAX2016射频增益测量与校准技术详解
1. MAX2016射频增益测量技术解析MAX2016作为一款DC至2.5GHz双对数检测器/控制器,在射频增益测量领域展现出独特优势。其核心功能是通过两个匹配的对数放大器实时检测输入信号功率,并输出与功率差值成比例的电压信号(VOUTD)。这种架构特别适合需要快速、精…...
