7-3学习发布订阅模式,观察者模式

news/2024/11/30 7:57:01/

7-3学习发布订阅模式,观察者模式

  • 1.发布订阅模式
  • 2.观察者模式

1.发布订阅模式

前端比较重要的两个设计模式,发布订阅模式和观察者模式。来简单的学习下。

let fs = require('fs');
let person = {}let event = {arr:[],on(fn){this.arr.push(fn);},emit(){this.arr.forEach(fn => fn());}
}
event.on(function() {console.log('执行了')
})
event.on(function() {console.log('执行了1')
})
fs.readFile('./1.txt', 'utf8', function (err, data) {person.name = dataevent.emit()
})
fs.readFile('./2.txt', 'utf8', function (err, data) {person.age = dataevent.emit() //发布
})

执行的结果:
在这里插入图片描述
发布和订阅要一起使用才能更清楚的看到效果,如果只有发布者或则只有订阅者,基本是没有多大意义的。其实发布和订阅没有很明显的直接关系,通过了中介(例如代码中的arr数组)来进行实现的。

2.观察者模式

观察者模式:有观察者 就有被观察者 。观察者需要放在被观察者中,被观察者的状态发生变化需要通知观察者,其内部也是基于发布订阅模式的。被观察者收集观察者,状态改变后要通知观察者。

//爸爸和妈妈 需要观察小宝宝的心理状态的变化
class Subject {//被观察者 小宝宝constructor(name){this.name = name;this.state = '开心';this.observers = [];}attach(observer){//Subject.prototype.attachthis.observers.push(observer);}setState(newState){this.state = newState;this.observers.forEach(o => o.update(this))}
}
class Observer{//观察者 爸爸和妈妈constructor(name){this.name = name;}update(baby){console.log(`当前${this.name}被通知了,当前小宝宝的状态是${baby.state}`)}
}
let baby = new Subject('小宝宝');
let father = new Observer('爸爸');
let mother = new Observer('妈妈');
baby.attach(father);
baby.attach(mother);
baby.setState('被欺负了')

执行的结果:
在这里插入图片描述
观察者模式可以是发布订阅模式,但是发布订阅模式就不能说成是观察者模式了。


http://www.ppmy.cn/news/789898.html

相关文章

【Hackintosh】暗影精灵2pro完美EFI分享

黑苹果安装 >>视频教程点这里 >>图文教程点这里 所用镜像来自黑过小兵 https://blog.daliansky.net/macOS-Catalina-10.15.3-19D76-Release-version-with-Clover-5103-original-image-Double-EFI-Version.html 注意阅读黑果小兵文章替换config 升级 mac OS 1…

【Unity】 基础交互入门(按钮点击事件的三种方法)

基础交互入门(按钮点击事件的三种方法) 一、在按钮绑定事件二、直接通过脚本绑定事件三、脚本创建按钮绑定方法四、拓展阅读 一、在按钮绑定事件 1、在资源面板创建C#脚本 2、创建点击事件需要执行的代码(这里以loadMain为例)&…

【Leetcode】59. 螺旋矩阵II

给定一个正整数 n,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。 示例: 输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ] 面试频率较高 1. 先定义一个空矩阵 2. startx表示行起始 starty表示列起始 3. 左闭右开…

新能源汽车引发的电池回收危机

【CSDN编者按】人们总是会在解决旧问题时制造出新的问题,如此循环。为了解决能源危机,制造了电动汽车。当电动汽车将要蓬勃发展时,电池污染以及回收又成为一大难题。随着几百万辆电动汽车即将上路,科学家们正在寻找更好的电池回收…

2022年全球与中国锂硅电池市场现状及未来发展趋势

2022-2028全球与中国锂硅电池市场现状及未来发展趋势 根据QYR(恒州博智)的统计及预测,2021年全球锂硅电池市场销售额达到了 亿美元,预计2028年将达到 亿美元,年复合增长率(CAGR)为 %&#xff0…

中国汽车锂电池行业市场形势分析及投资风险研究报告

沃尔沃集团最初将投资7500万欧元在比利时工厂生产电池模块。 瑞典卡车制造商沃尔沃集团周三表示,将初步投资7500万欧元,于2025年开始在其比利时根特的卡车工厂生产电池模块。该公司表示,新建筑将几乎完全自动化,并将能够使用合作伙…

2022年全球市场电动汽车电池组总体规模、主要生产商、主要地区、产品和应用细分研究报告

本文研究全球市场、主要地区和主要国家电动汽车电池组的销量、销售收入等,同时也重点分析全球范围内主要厂商(品牌)竞争态势,电动汽车电池组销量、价格、收入和市场份额等。 针对过去五年(2017-2021)年的历…

递归方程时间复杂度分析

递归算法的时间复杂度分析 一个认识递归问题的小例子 首先使用一个简单的案例看一下递归方程的时间复杂度分析。 假设有以下的简单算法: int Sort(int i,int j) {if(ij)return(x[i]);else{m (i j - 1)/2;return(Merge(Sort(i,m),Sort(m 1,j)));} }x x x是一个…