订阅发布和观察者模式 ╰+攻爆jí腚メ 2022-08-28 14:47 207阅读 0赞 # 发布订阅模式 # > 把多个方法暂存起来,最后一次触发执行 * 作用: 解偶 * 使用场景: 如,多个类或者函数内,可以分散订阅某个操作,最后统一发布。分散的好处就是不做代码侵入,各自为政,实现代码低耦合。 * 几乎所有的库,都会有基于该设计模式的功能 ## 案例 ## > 事件调度中心 // 事件中心,做事件调度 const fs = require("fs"); let events = { _events: [], on(fn) { this._events.push(fn); }, emit(data) { this._events.forEach((fn) => fn(data)); }, }; > 订阅 let arr = []; events.on((data) => { // 订阅 console.log("读取"); arr.push(data); if (arr.length === 2) { console.log("读取完毕", arr); // 订阅完成 } }); > 发布 fs.readFile("./a.txt", "utf-8", (err, data) => { events.emit(data); // 发布 }); fs.readFile("./b.txt", "utf-8", (err, data) => { events.emit(data); }); # 观察者模式 # * 基于发布/订阅模式 * 该模式存在两个角色:观察者和被观察者 * 结合vue理解 * 在vue2.x 数据双向绑定中,只要vue的数据(状态)变化,依赖该数据的视图就要更新 ## 案例 ## > 被观察者 class Subject { constructor(name) { this.name = name; this.observers = []; // 存放有哪些对象正在观察我 this.state = "state"; // 状态数据 } attach = (o) => { this.observers.push(o); // 订阅要观察我的对象 }; setState = (newState) => { this.state = newState; this.observers.forEach((o) => o.update(this.name, newState)); //只要我状态发生变化,我就会同步给我给所有观察我的对象 }; } > 观察者 class Observer { constructor(name) { this.name = name; } update = (o, state) => { //接收被观察者同步过来的状态 console.log(this.name + ":" + o + state); }; } > 被观察者实例 let s = new Subject("sub"); > 有若干的观察者 let o1 = new Observer("ob1"); let o2 = new Observer("ob2"); > 建立观察者和被观察者之间的关系 s.attach(o1); s.attach(o2); > 变更被观察者状态 s.setState(“变化了”); s.setState(“状态变更了”); ## 关联技术 ## * vue 数据双向绑定 * vuex…
相关 java设计模式--观察者(发布订阅) *1、概述: ** 观察者模式又称“发布订阅模式”定义一种一对多的依赖关系,让多个观察者对象同时监视着被观察者的状态,当被观察者的状态发送变... 旧城等待,/ 2024年04月17日 20:15/ 0 赞/ 78 阅读
相关 订阅发布和观察者模式 发布订阅模式 > 把多个方法暂存起来,最后一次触发执行 作用: 解偶 使用场景: 如,多个类或者函数内,可以分散订阅某个操作,最后统一发布。分散的好处就是不 ╰+攻爆jí腚メ/ 2022年08月28日 14:47/ 0 赞/ 208 阅读
相关 观察者模式(发布-订阅者模式) 观察者模式定义了一种依赖关系,解决了主体对象和观察者之间功能的耦合,主要应用于大型项目的模块化开发中,解决团队开发中模块之间的通信问题,利用观察者模式还可以实现自定义事件。 素颜马尾好姑娘i/ 2022年05月22日 06:00/ 0 赞/ 216 阅读
相关 设计模式之观察者模式(发布订阅模式) 说明:本文参照《大话设计模式》中的案例做简要解析 观察者模式: 又叫发布-订阅模式,定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。 深藏阁楼爱情的钟/ 2022年05月21日 10:39/ 0 赞/ 266 阅读
相关 javascript 观察者模式 发布订阅模式 观察者模式 观察者模式,每一个观察者对象有两个方法 添加监听`subscribe` 发布事件`publish` 观察者有个`list`存放所有的已经添加监 本是古典 何须时尚/ 2022年04月24日 10:14/ 0 赞/ 213 阅读
相关 JavaScript中观察者和发布订阅模式 可以参考文章: [https://juejin.im/post/5a14e9edf265da4312808d86][https_juejin.im_post_5a14e9e 超、凢脫俗/ 2022年01月27日 07:07/ 0 赞/ 222 阅读
相关 学习观察者模式与发布/订阅模式 > 最近学习了观察者模式和发布/订阅模式,但是一直有种不得要领的感觉,今天重新复习了一遍又有了新的思考,记录一下学习收获。 观察者模式 概念引用原文的话如下: > T 港控/mmm°/ 2022年01月20日 03:55/ 0 赞/ 283 阅读
相关 对于观察者模式和发布者-订阅者模式的一些理解 最近在试读vue的源码(vue3都要出来了,vue2的源码还没去读,惭愧惭愧),发现自己对观察者以及发布者-订阅者模式的理解不够,立文来梳理记录一下自己的思路。 一、观察者 曾经终败给现在/ 2022年01月17日 22:19/ 0 赞/ 291 阅读
相关 发布订阅模式(观察者模式) 设计模式的目的就是使类成为可复用的组件。 在观察者模式中观察者接口只注重被观察者,而被观察者接口只注重观察者,具体是观察者接口实现类中的哪一个并不在意,而被观察者也是如此。这 清疚/ 2021年12月15日 00:27/ 0 赞/ 289 阅读
还没有评论,来说两句吧...