麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

JavaScript中發布/訂閱模式的簡單實例

2019-11-20 13:57:37
字體:
來源:轉載
供稿:網友

上次研究觀察者模式,很多文章說它也叫Subscribe/Publish(發布/訂閱模式)。可在《Javascript設計模式》一書中,這兩種模式還是有些區別的。書中原話如下:

1.Observer模式要求希望接收到主題通知者的觀察者必須訂閱內容改變的事件。

2.Subscribe/Publish模式使用了一個主題/事件通道,這個通道介于訂閱者和發布者之間。該事件系統允許代碼定義應用程序的特定事件,該事件可以傳遞自定義參數,自定義參數包含訂閱者所需要的值。其目的是避免訂閱者和發布者產生依賴關系。

與Observer模式不同之處在于它允許任何訂閱者執行適當的事件處理程序來注冊和接收發布者發出的通知。

好吧,不明覺厲。下面是我的理解:

1.觀察者模式中,目標對象負責維護觀察者。發布/訂閱模式中發布者不關心訂閱者,只負責把消息丟出去就不管了。

2.觀察者模式中,觀察者要提供一個接口,然后當目標對象發生改變時調用此接口使自身狀態和目標狀態保持一致。即所有的觀察者都要有一個統一的接口(比如上文中寫的update方法,大家的方法都要叫這個名字)。而發布/訂閱模式中,訂閱者事件的觸發不是依靠這樣一個接口,而是訂閱者通過監聽一個特定的消息(這個消息一般包含名稱和訂閱者所需要的參數)來觸發的。可以理解為訂閱者監聽的不是發布者,而是消息池,只要消息池里有它關心的消息,即觸發事件,不管這個消息是誰發布過去的。發布者和訂閱者是解耦的。

下面是js中發布/訂閱模式的實現,復制粘貼到console里面試一試就明白了:

復制代碼 代碼如下:

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: www.91视频com| 99精品视频久久精品视频 | 欧美激情精品久久久久久黑人 | 毛片视频观看 | 素人视频在线观看免费 | 久久99国产精品免费网站 | 免费激情网站 | 91在线视频在线观看 | 万圣街在线观看免费完整版 | 黄色av网站免费 | 久久午夜国产 | 久草干 | 黄色网络免费看 | h视频免费在线 | 一级免费a | 亚洲一级毛片 | 黄视频免费在线观看 | 九色中文字幕 | 成人艳情一二三区 | 久草在线高清 | 91精品一区二区综合在线 | 亚洲成人午夜精品 | 双性精h调教灌尿打屁股的文案 | 国产一级淫片在线观看 | 国产精品18久久久久久久久 | 久久久久久久久久亚洲精品 | 亚洲成人免费视频在线 | 一级免费在线视频 | 福利在线免费 | 国产亚洲小视频 | 国产精品视频一区二区噜噜 | 免费在线看a | 色视频在线播放 | 中文字幕一区在线观看视频 | 欧美精品久久久久久久久老牛影院 | 中文字幕综合在线观看 | 欧美一级爱操视频 | 国产噜噜噜 | 91成人影库 | 成人国产精品一区 | 成人福利在线免费观看 |