javaScript设计模式---(订阅发布模式)

订阅发布模式:定义对象之中一种一对多的依赖关系,当一个对象的状态发生改变时候,所有依赖于它的对象都将得到通知。

// 订阅发布模式
let pubsub = {};
(function(pubsub){
    let topics = {};
    let subId = 0;
    // 订阅
    pubsub.subscribe = function (topic, callback) {
        if (!topics[topic]) {
            topics[topic] = []
        }
        topics[topic].push({
            func: callback,
            id: subId++
        })
    }
    // 发布
    pubsub.publish = function (topic, args) {
        if (!topics[topic]) {
            return false;
        }
        let subscribes = topics[topic];
        let i = subscribes.length
        while (i--) {
            subscribes[i].func.call(null, args)
        }
        return this;
    }
    // 取消 订阅
    pubsub.unsubscribe = function (id) {
        for (let key in topics) {
            if (topics[key]) {
                for (let i = 0, len = topics[key].length; i < len; i++) {
                    if (topics[key][i] === id) {
                        topics[key].splice(i, 1);
                        return id;
                    }
                }
            }
        }
    }
})(pubsub)
pubsub.subscribe('say', function (data) {
    console.log(data)
})
pubsub.publish('say', 'Hello World!')

 

posted @ 2017-09-17 22:11  RunningAndRunning  阅读(151)  评论(0编辑  收藏  举报