设计模式 ~ 观察者模式

概念

观察者模式是一种设计模式,也被称为发布-订阅模式或事件模式;
用于在对象之间建立一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新;
~
如:DOM事件、vue / React 生命周期、各种异步回调 ~ 定时器、Promise.then、nodeJs 流式读取、端口监听

代码演示

存在两个角色:主题(Subject)和观察者(Observer):
主题是被观察对象,它维护一组观察者对象并通知它们;
观察者是依赖于主题的对象,它们注册自己到主题以便于主题状态改变接收通知,并执行响应操作;

Subject: 可以理解为饮品店的吧台,当完成会通知你去拿取

class Subject {private state: number = 0 // 状态private observers: Observer[] = [] // 观察者们// 获取状态getState(): number {return this.state}// 设置状态setState(newState: number) {this.state = newStatethis.notify() // 通知}// 添加观察者attach(observer: Observer) {this.observers.push(observer)}// 通知private notify() {this.observers.forEach(observer => {observer.update(this.state)})}
}

Observer : 可以理解为饮品店的顾客,等待吧台的通知

class Observer {name: stringconstructor(name: string) {this.name = name}// 通知update(state: number) {console.log(`${this.name} updated, state is ${state}`)}
}

创建观察者对象

const sub = new Subject()
const observer1 = new Observer('A')
const observer2 = new Observer('B')
sub.attach(observer1)
sub.attach(observer2)
sub.setState(1)

UML类图

~ 1:n 表示 1对多,一个主题对应多个观察者
在这里插入图片描述

VUE

vue 中的观察者模式:watch、watchEffect、包括组件更新过程
Watcher:监听器 ~ 监听 data 、当 data发生更新触发 re-render(重新渲染)
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/28320.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AVLTree深度剖析(单旋)

前言 二叉树搜索树是存在一定的缺陷问题的,当我们要插入的数据是有序,或者说接近于有序,,二叉搜索树及有可能退化为单支树,查找元素相当于在顺序表当中搜索元素,效率低下 --------------------------------…

Python对Excel不同的行分别复制不同的次数

本文介绍基于Python语言,读取Excel表格文件数据,并将其中符合我们特定要求的那一行加以复制指定的次数,而不符合要求的那一行则不复制;并将所得结果保存为新的Excel表格文件的方法。 这里需要说明,在我们之前的文章Pyt…

【C++】list的使用及底层实现原理

本篇文章对list的使用进行了举例讲解。同时也对底层实现进行了讲解。底层的实现关键在于迭代器的实现。希望本篇文章会对你有所帮助。 文章目录 一、list的使用 1、1 list的介绍 1、2 list的使用 1、2、1 list的常规使用 1、2、2 list的sort讲解 二、list的底层实现 2、1 初构…

等保测评包过是真的吗?安全吗?

最近有小伙伴在问,等保测评包过是真的吗?安全吗?哪位大哥来解答一下? 等保测评包过是真的吗?安全吗? 【回答】:等级保护采用备案与测评机制,而非认证机制,因此不存在“包…

【C语言】杨氏矩阵中寻找元素

题目名称: 杨氏矩阵 题目内容: 有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从下到上递增的(杨氏矩阵的定义),请编写程序在这样的矩阵中查找某个数字是否存在。 形如这样的矩阵就是杨氏…

Windows bat隐藏运行窗口的几种方案

文章目录 一、背景二、测试数据三、隐藏bat运行窗口方案1. 使用VBScript脚本2. 使用mshta调用js或vbs脚本3. 将bat编译为exe程序4. 使用任务计划程序 一、背景 有些程序在执行批处理脚本时,可能会看到dos窗口,或者看到窗口一闪而过。如果批处理脚本执行…

【AUTOSAR】:车载以太网

车载以太网 References参考文献车载以太网的物理连接MACPHYPHY的主从关系100BASE-T1回音消除车载以太网的应用层协议References参考文献 汽车软件通信中间件SOME/IP简述100BASE-T1以太网:汽车网络的发展车载以太网的物理连接 MAC MAC(Media Access Control介质访问)一般集成…

【VirtualBox】安装 VirtualBox 提示 needsthe Microsoft Visual C++ 2019

概述 一个好的文章能够帮助开发者完成更便捷、更快速的开发。书山有路勤为径,学海无涯苦作舟。我是秋知叶i、期望每一个阅读了我的文章的开发者都能够有所成长。 一、开发环境 开发环境:windows10虚拟机:VirtualBox 7.0.8 二、报错 ubun…

23.JavaWeb-集群+Nginx+JMeter

1.集群概念 平时用的服务是的并发量是有限的,像tomcat只有不到500的并发量,不能满足高并发的需求,因此就采用了集群的方法,用多个服务器 当用户请求集群系统时,集群给用户的感觉就是一个单一独立的服务器,而…

基于STM32 ARM+FPGA伺服控制系统(二)软件及FPGA设计

完整的伺服系统所包含的模块比较多,因此无法逐一详细介绍,所以本章着重介绍 设计难度较高的 FPGA 部分并简单介绍 ARM 端的工作流程。 FPGA 部分主要有 FOC 算法、电流采样算法及编码器采样算法,是整个控制系统的基础,直接…

ELK-日志服务【redis-配置使用】

目录 环境 【1】redis配置 【2】filebeat配置 【3】对接logstash配置 【4】验证 【5】安全配置:第一种:kibana-nginx访问控制 【6】第二种:在ES-主节点-配置TLS 【7】kibana配置密码 【8】logstash添加用户密码 环境 es-01,kibana 1…

ChatGPT 最佳实践指南之:系统地测试变化

Test changes systematically 系统地测试变化 Improving performance is easier if you can measure it. In some cases a modification to a prompt will achieve better performance on a few isolated examples but lead to worse overall performance on a more representa…