javascript 设计模式 发布订阅模式

来源:互联网 发布:树莓派python编程 编辑:程序博客网 时间:2024/05/29 14:07
发布/订阅模式(Pub/Sub)是一种消息模式,它有两个参与者:发布者和订阅者。发布者向某个信道发布
一条消息,订阅者绑定这个信道,当有消息发布至信道时就会接收到一个通知。最重要的一点是,发布者和
订阅者是完全解耦的,彼此并不知晓对方的存在。两者仅仅共享一个信道名称。

这种模式在js里面有这天然的优势,因为js本身就是事件驱动型语言。比如,页面上有一个button,
你点击一下就会触发上面的click事件,而此时有一部分程序正在监听这个事件,随之触发相关的处理程序。

事实上,我们也早就熟悉这个模式了,只是不知道这叫什么(订阅发布模式 又名 观察者模式).
这个模式最大的一个好处就在于,能够解耦回调函数,让你的程序看起来更美观(虽然现在有Promise和

Deferred帮忙,但是不彻底)。

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>发布订阅模式</title></head><body><script>    var pubsub = (function(){        var q = {}, topics = {}, subUid = -1;        //发布消息        q.publish = function(topic, args) {            if (!topics[topic]) {                return;            }            var subs = topics[topic], len = subs.length;            while(len--) {                subs[len].func(topic, args);            }            return this;        };        //订阅事件        q.subscribe = function(topic, func) {            topics[topic] = topics[topic] ? topics[topic] : [];            var token = (++subUid).toString();            topics[topic].push({                token : token,                func : func            });            return token;        };        return q;        //取消订阅就不写了,遍历topics,然后通过保存前面返回token,删除指定元素    })();    //触发的事件    var logmsg = function(topics, data) {        console.log("logging:" + topics + ":" + data);    }    //监听指定的消息'msgName'    var sub = pubsub.subscribe('msgName', logmsg);    //发布消息'msgName'    pubsub.publish('msgName', 'hello world');    //发布无人监听的消息'msgName1'    pubsub.publish('anotherMsgName', 'me too!');</script></body>





阅读全文
0 0
原创粉丝点击