简单实现消息订阅与发布

编程入门 行业动态 更新时间:2024-10-26 12:22:43

简单实现<a href=https://www.elefans.com/category/jswz/34/1771421.html style=消息订阅与发布"/>

简单实现消息订阅与发布

在发布/订阅模式中,你可以想象存在一个消息中心的地方,你可以在那里“注册一条消息”,那么被注册的这条消息可以被感兴趣的若干人“订阅”,一旦未来这条“消息被发布”,则所有订阅了这条消息的人都会得到提醒。

这个就是发布/订阅模式的设计思路。接下来我们一点一点实现一个简单的发布/订阅模式。

//先实现一个消息中心的构造函数(类),用来创建一个消息中心
function MessageCenter(){var _messages = {}; // 所有注册的消息都存在这里this.register= function(){}; // 用来注册消息的方法this.subscribe = function(){};  // 用来订阅消息的方法this.publish= function(){};   // 用来发布消息的方法
}

消息中心的搭建好了 接下来完善 register 、subscribe 、publish这三个方法就好了

 // register方法负责注册消息,接收一个注册消息的类型 比如'娱乐'类型消息this.register= function(msgType){// 判断是否重复注册if(typeof _messages[msgType] === 'undefined'){_messages[msgType] = [];    // 数组中会存放订阅者}else{console.log('这个消息已经注册过了');}}// subscribe方法,需要订阅者和已经注册了的消息进行绑定// 由于订阅者得到消息后需要处理消息,所以他(subFn)是一个个的函数this.subscribe = function(msgType, subFn){// 判断是否有这个消息if(typeof _messages[msgType] !== 'undefined'){_messages[msgType].push(subFn); //订阅 }else{console.log('这个消息还没注册过,无法订阅')}}// publish方法,发布某条消息,并通知订阅这条消息的所有订阅者函数this.publish= function(msgType, args){    // msgType是消息类型,args是这条消息的附加信息// 发布消息时,判断下有没有这条消息if(typeof _messages[msgType] === 'undefined') {console.log('没有这条消息,无法发布');}var events = {type: msgType,args: args || {}};_messages[msgType].forEach( sub => sub(events) )}
}

这样,一个简单的发布/订阅模式就完成了,当然这只是这种模式的其中一种简单实现,还有很多其他的实现方式。
就此我们就可以用他来处理一些异步操作了。


var msgCenter = new MessageCenter();//注册消息 娱乐msgCenter.register('娱乐');// 订阅消息 娱乐msgCenter.subscribe ('娱乐', subscribeFn);function subscribeFn(events) {console.log(`${events.type}消息更新了`, events.args);} //发布setTimeout(function(){msgCenter.publish('娱乐', '喜洋洋与灰太狼正在热映');}, 1000);

更多推荐

简单实现消息订阅与发布

本文发布于:2024-02-27 04:07:45,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1705118.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:消息   简单

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!