设计模式——观察者模式(发布与订阅模式)。

本文介绍了观察者模式的概念,将其比喻为游戏公会的通知系统。通过一个简单的JavaScript实现展示了如何订阅、发布和取消订阅事件。示例中,多个订阅者(会员)能接收到同一事件(消息)的更新,体现了观察者模式的一对多特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

观察者模式

观察者模式通俗点讲就是上帝视角,其核心思想便是一对多

比方说在游戏公会中,公会中一些集体事件需要分发到每位会员信箱中,由于是同一个消息且分发到不同人手里,这可以称为观察者模式。

每个对象发生改变时,相关依赖对象皆会得到通知并自动更新。

var pubsub = {
        list: {},//存储订阅事件
        subscribe: function (key, fn) {
            //添加订阅方法
            if (!this.list[key]) {
                this.list[key] = [];
            }
            this.list[key].push(fn);
        },
        publish: function (key,time) {
            //发布订阅
            for (var index in this.list[key]) {
                this.list[key][index].call(this,time);
            }
        },
        unpublish: function (key, fn) {
            var that=this;
            //取消订阅
            if (!that.list[key])
                return;
            if(!fn)
            {
                console.log('fn参数不存在!');
            }
            else{
                if(typeof fn=='function')
                {
                    that.list[key].map(function (f,index){
                        if(f===fn)
                        {
                            that.list[key].splice(index,1);
                        }
                    });
                }
                else{
                    console.log('fn参数不是函数!');
                }
            }

        }
    }

    //订阅
    pubsub.subscribe('gowork',function (time){
        console.log("上班了~打卡时间为:"+time);
    });
    pubsub.subscribe('backwork',work);
    function work(time){
        console.log("下班了~打卡时间为:"+time);
    }

    console.log(pubsub.list);

    //发布订阅
    pubsub.publish('gowork','08:50:00');
    pubsub.publish('backwork','17:30:00');

    //取消订阅
    pubsub.unpublish('backwork',work);

    console.log(pubsub.list);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值