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

观察者模式

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

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

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

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);


猜你喜欢

转载自blog.csdn.net/weixin_46953330/article/details/118959891