前言最近在开发redux或者vux的时候,状态管理中的createStore和我们在组件中调用的dispatch将消息传递给状态管理中心处理一些操作。其中有一些类似于我们经常看到的订阅模式,所以我写了一个小的。demo实现了订阅模式的流程思路。订阅模式类似于某个平台的作者,或者UP主,平台作为中间件传递消息。作者是发布和订阅的人。被关注或订阅后,发布消息,收听作者的用户,可以收到作者的消息创建平台varMessege=function(){this.list={};this.cache={};};平台创建完成后,平台作者自己创建内容并发布消息messege.prototype.add=function(noticeType,client){//将接收到的信息添加到noticeType订阅列表中console.log(noticeType);控制台日志(客户端);if(!this.list[noticeType])this.list[noticeType]=[];this.list[noticeType].push(client);this.cache[noticeType].forEach((words)=>{client.listen(noticeType,words);});};同时也可以删除自己已经发布的消息//通过传入的信息类型,遍历找到Messege.prototype.remove=function(noticeType,client){if(!this.list[noticeType])返回;//可以作为提醒,也可以用来处理满足业务需求的操作varindex=this.list[noticeType].findIndex((item)=>item===client);console.log(this.list[noticeType].splice(index,1));this.list[noticeType].splice(index,1);};在发布这些以前的列表,并订阅up主的订阅者可以通过往期留言查看往期发表的文章信息列表。这时候就需要一个缓存来存储和发布信息,起到历史记录的作用。Messege.prototype.triggle=function(noticeType,words){if(!this.cache[noticeType])this.cache[noticeType]=[];this.cache[noticeType].push(words);如果(!this.list[noticeType])返回;this.list[noticeType]].forEach((client)=>{client.listen(noticeType,words);});};订阅对象实例化,我们可以实例化该对象来处理一些需要执行的业务需求varClient=function(name){this.name=name;};//监听事件,事件处理逻辑Client.prototype.listen=function(noticeType,words){console.log(`${this.name}从${noticeType}收到信息是:${words}`);};完成发布者的功能后,我们可以自己测试发布一些消息
