JavaScript发布订阅者模式 朴灿烈づ我的快乐病毒、 2022-01-20 02:09 259阅读 0赞 假如你要建立一个网站,通常来说会有许多用户。你作为一名管理者,有时候需要将重要的消息发布给你的用户。在软件开发领域,开发此功能往往用到发布订阅者模式。下面我以简单的javascript来说明。 1. 定义发布者类。发布者最基本的两个属性:发送的消息,发送的人 function Publisher() { this.observers =[]; // 存储需要发布消息的人 this.state="hello" // 发送的消息 } 复制代码 除此之外,一个Publisher还需要有能够接纳新的订阅消息的人的功能,或者删除某个订阅者的功能,同时需要能够将消息发送出去的功能。 // 新增订阅者功能 Publisher.prototype.addUser=function(obj) { const nameList= this.observers.map(item=>{ return item.name; }) if(nameList.indexOf(obj.name) < 0) { this.observers.push(obj) } return this; } //删除订阅者功能 Publisher.prototype.deleteUser=function(obj){ let index = -1 this.observers.forEach((item,key)=>{ if(item.name === obj.name){ index = key } }) if(index !== -1) { this.observers.splice(index,1) } return this } // 通知订阅者功能 Publisher.prototype.noticeUser=function(data){ this.observers.forEach((item)=>{ item.update(data) }) } 复制代码 值得注意的是,上述通知订阅者的功能是通过遍历this.observers 并调用每一个订阅者的update方法。所以每一个订阅者需要对应有update方法。每一个订阅者的类似结构如下: [ { name:'张三', update:(data)=>{console.log(data)} }, { name:'李四', update:(data)=>{console.log(data)} }, ... ] 复制代码 1. 构造订阅者对象,由于每一个订阅者都有name属性和update方法。最简单的就是采用构造函数方法来实现 function Subscribe(name){ this.name =name; this.update = function(data){ console.log(data); }; } 复制代码 1. 有了Subscribe模板,我们开始构造出每一个具体的订阅者实例出来。 let lisi = new Subscribe('lisi') let xiaoming = new Subscribe('xiaoming') 复制代码 1. 将构造的订阅人lisi 和 xiaoming 加入到发布者对象的observer中 let pb = new Publisher() pb.addUser(lisi) pb.addUser(xiaoming) 复制代码 1. 发布者需要发布消息时: pb.noticeUser("hello") 复制代码 至此一个最简单的发布订阅者模式实现了,这里还有两点优化建议。 第一,上述构造出来的lisi,xiaoming都会自动有update方法,并且update的行为都是一样的,如果需要例如xiaoming的update与其他不同,只需要重新定义即可 xiaoling.update=(data)=>{console.log("hello"+data)} pb.addUser(xiaoling) 复制代码 第二, 发布者需要手动调用pb.noticeUser()去通知state消息,可以做到state变动了自动去调用pb.noticeUser()吗?可以的,此时 Object.defineProperty()就派上用场了 let pb = new Publisher() Object.defineProperty(pb,'state',{ set:function(newVal,) { let a = this debugger pb.noticeUser(newVal) } }) pb.addUser(lisi) pb.addUser(xiaoming) pb.state = '123' //pb.noticeUser() 复制代码 如果state变化了将自动触发pb.noticeUser(),实现自动通知功能,是不是有点Vue原理既视感!
相关 JavaScript 简单实现观察者模式和发布-订阅模式 JavaScript 简单实现观察者模式和发布-订阅模式 1. 观察者模式 1.1 什么是观察者模式 1.2 代码实现 2. 发布- 秒速五厘米/ 2023年10月14日 08:41/ 0 赞/ 33 阅读
相关 【JavaScript 设计模式】观察者模式与发布订阅模式 JavaScript 设计模式系列文章: [设计模式总览][Link 1] [工厂模式][Link 2] [单例模式][Link 3] [观察者模式/ Bertha 。/ 2022年12月04日 07:58/ 0 赞/ 231 阅读
相关 js 发布-订阅者模式 / 发布-订阅模式 bw 2020/07/29 / const Event = { regsiter:{}, た 入场券/ 2022年10月31日 10:57/ 0 赞/ 165 阅读
相关 观察者模式(发布-订阅者模式) 观察者模式定义了一种依赖关系,解决了主体对象和观察者之间功能的耦合,主要应用于大型项目的模块化开发中,解决团队开发中模块之间的通信问题,利用观察者模式还可以实现自定义事件。 素颜马尾好姑娘i/ 2022年05月22日 06:00/ 0 赞/ 217 阅读
相关 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 赞/ 224 阅读
相关 JavaScript发布订阅者模式 假如你要建立一个网站,通常来说会有许多用户。你作为一名管理者,有时候需要将重要的消息发布给你的用户。在软件开发领域,开发此功能往往用到发布订阅者模式。下面我以简单的javasc 朴灿烈づ我的快乐病毒、/ 2022年01月20日 02:09/ 0 赞/ 260 阅读
相关 发布订阅模式(观察者模式) 设计模式的目的就是使类成为可复用的组件。 在观察者模式中观察者接口只注重被观察者,而被观察者接口只注重观察者,具体是观察者接口实现类中的哪一个并不在意,而被观察者也是如此。这 清疚/ 2021年12月15日 00:27/ 0 赞/ 293 阅读
相关 JavaScript设计模式(5)——发布者-订阅模式 发布者订阅模式是什么? 发布者订阅模式又称观察者模式,它定义对象间的一种一对多的依赖关系,当一个对象的状 态发生改变时,所有依赖于它的对象都将得到通知。 简(shuo 我就是我/ 2021年09月02日 10:41/ 0 赞/ 345 阅读
还没有评论,来说两句吧...