JS设计模式初识(五)-发布订阅模式

定义

发布订阅模式又称观察者模式bash

// 发布订阅模式
    const eventSubscribe = (function() {
        const eventSet = {};
        return {
            // 获取订阅列表
            getEventList: () => Object.keys(eventSet),
            // 得到某个key的callbacklist
            getCallbacks: (key) => eventSet[key],
            // 订阅
            subscribe: (key, ...callbacks) => {
                if (!eventSet[key]) {
                    eventSet[key] = [];
                }
                eventSet[key].push(...callbacks);
            },
            // 发布函数
            publish: (key, ...args) => {
                const callbacks = this.getCallbacks(key);
                if(callbacks && callback.length === 0) {
                    return false;
                }
                for (const callback of callbacks) {
                    callback.apply(this, args);
                }
            },
            // 删除订阅
            remove: (key, callback) => {
                const callbacks = this.getCallbacks(key);
                if (callbacks && callbacks.length === 0) {
                    return false; 
                }
                if (!callback) { // 无callback ,取消key的全部回调
                    callbacks && (callbacks.length = 0);
                }
                callbacks = callbacks.filter((item) => item !== callback);
                return true;
            }
    
        };
    })();
复制代码
相关文章
相关标签/搜索