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!')