订阅发布者模式详解

订阅发布者模式是一种对象间一对多的依赖关系,当发布者状态改变时,所有订阅者都会收到通知。在这个实现中,EventManager是事件中心,负责事件的注册、触发和解绑。订阅者通过on方法订阅事件,fire方法用于触发事件,off方法用于解除事件绑定。
摘要由CSDN通过智能技术生成

什么是订阅发布者模式?

定义

发布-订阅模式其实是一种对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到状态改变的通知

订阅者(Subscriber)把自己想订阅的事件注册(Subscribe)到调度中心(Event Channel),当发布者(Publisher)发布该事件(Publish Event)到调度中心,也就是该事件触发时,由调度中心统一调度(Fire Event)订阅者注册到调度中心的处理代码

图解

图解如下
在这里插入图片描述

Demo

实现代码如下

//发布订阅模式
const EventManager=(function(){
    //事件存储对象
    let eventList={};
    //事件注册与绑定(形参event指代事件名,形参handler指代事件欲绑定的函数)
    function on(event,handler){
        //判断事件是否存在
        if(!eventList[event]){
            //如果没有则注册事件,并给事件绑定handler函数
            eventList[event]=[handler]
        }else{
            //如果有则给事件绑定handler函数(一个事件绑定多个函数)
            eventList[event].push(handler);
        }
    }
    //事件触发(形参event指代事件名,形参data事件绑定函数的传入参数)
    function fire(event,data)
    {
       //判断事件存储对象是否包含该事件
       if(eventList[event]){
         //如果有则调用事件绑定的所有函数
         eventList[event].forEach(handler=>handler(data))
       }
    }
    //事件解绑
    function off(event,handler)
    {
         //如果事件存在
         if(eventList[event])
         {
            //且传入的形参handler为空
            if(!handler){
              //删除事件存储对象中的事件
              delete eventList[event];  
            }
         }
         //如果事件不存在
         else
         {
            //使用indexOf获取事件绑定的指定函数下标
            let index=eventList[event].indexOf(handler);
            //使用splice删除事件指定绑定函数
            eventList[event].splice(index,1);
         }
    }
    return {
        on:on,//on事件注册与绑定
        fire:fire,//fire触发事件
        off:off//off事件解绑
    }

})();
EventManager.on('sayHello',function(data){
    console.log('hello'+data);
})

EventManager.fire('sayHello','HelloWorld');


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值