国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

前端學習筆記之觀察者模式

tommego / 1692人閱讀

摘要:觀察者模式也稱發布訂閱模式它的作用就是當一個對象的狀態發生改變時,所有依賴于它的對象都將得到通知,自動刷新對象狀態舉個生活比較常見常見的例子比如你去面試之后,面試官看你表現不錯,最后會跟你要聯系方式,以便之后可以聯系你。

觀察者模式也稱"發布-訂閱"模式,它的作用就是當一個對象的狀態發生改變時,所有依賴于它的對象都將得到通知,自動刷新對象狀態

舉個生活比較常見常見的例子,比如你去面試之后,面試官看你表現不錯,最后會跟你要聯系方式,以便之后可以聯系你。在這角色扮演當中,你就是“訂閱者”,面試官就是“發布者”。

那么發布訂閱模式是咋實現的呢?

思路

給定一個發布者

面試者將聯系方式給發布者

發布者的一個列表有各種職位(web端的,java 的),里面記載回調函數以便通知這些面試者

最后發布消息的時候,會遍歷這個列表的職位的回調函數,告訴面試者面試這個職位是通過還是不通過

如果面試者取消了訂閱,那么將回調函數和之前的回調函數作對比,如果相等,就將這個面試者的上班通知去掉

var Event = (function() {
  var events = {}; //發布者

  //subscribe也就是訂閱,post 代表面試者要面的職位,callback表示為回調函數
  function subscribe(post, callback) {
    events[post] = events[post] || []; //發布者的列表里有沒有這個面試職位,如果沒有就創建一個空數組
    events[post].push(callback);
  }

  //publish 表示發布
  function publish() {
    var post = Array.prototype.shift.call(arguments); //第一個參數指定“鍵”
    var fns = events[post]; //設置緩存,提高性能
    if (!fns) { //如果發布者的列表里沒有這個職位,那肯定是不能發布
      return;
    }
    for (var i = 0; i < fns.length; i++) { //遍歷當前的職位的數組里有幾個面試者
      fns[i].apply(this, arguments);
    }
  }

  //unsubscribe 表示取消訂閱
  function unsubscribe(post, fn) {
    var fns = events[post];
    if (fns) {
      if (fn) {
        for (var i = fns.length; i >= 0; i--) {
          if (fns[i] === fn) fns.splice(i, 1);
        }
      } else {//如果沒有傳入fn回調函數,直接取消post對應消息的所有訂閱
        fns = [];
      }
    } else {//如果發布者的列表沒有這個職位,直接 return
      return;
    }
  }
  
  return {
    subscribe: subscribe,
    publish: publish,
    unsubscribe: unsubscribe
  };
})();

測試:

var fn1 = function(time) {
  console.log("小明你通過了面試,上班時間:" + time);
};
var fn2 = function(time) {
  console.log("小強你通過了面試,上班時間:" + time);
};
//小明將聯系方式給了發布者,發布者(hr)覺得小明不錯,可以通過,于是在列表(java)里寫下了一些回調函數,到時候發布的時候將上班時間告訴小明
Event.subscribe("java", fn1);
//小強也訂閱了
Event.subscribe("java", fn2);

Event.publish("java", "2017-10-01");


/*輸出:
小明你通過了面試,上班時間:2017-10-01
小強你通過了面試,上班時間:2017-10-01
*/

Event.unsubscribe("java", fn1);//刪除小明的上班通知
Event.publish("java", "2017-10-01");

/*輸出:
小強你通過了面試,上班時間:2017-10-01
*/
參考

Javascript異步編程的4種方法
js設計模式筆記 - 觀察者模式

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/88850.html

相關文章

  • 每周分享第 1 期

    摘要:由于微信不能訪問外鏈,需要點擊頁尾左下角的閱讀原文,才能訪問本文中的鏈接。接下來讓我帶你走進高級前端的世界,在進階的路上,共勉如果你想加群討論每期面試知識點,公眾號回復加群即可 (關注福利,關注本公眾號回復[資料]領取優質前端視頻,包括Vue、React、Node源碼和實戰、面試指導)showImg(https://segmentfault.com/img/remote/1460000...

    Carbs 評論0 收藏0
  • javascript設計模式學習筆記發布-訂閱模式

    摘要:發布訂閱模式定義對象間的一種一對多的依賴關系當一個對象的狀態發生改變時所有依賴于它的對象都將得到通知簡單實現定義發布者緩存列表存放訂閱者的回調函數定義訂閱者發布消息測試訂閱者價格訂閱者價格發布消息上面的實現方式導致了每個訂閱者都會收到發布 發布-訂閱模式 定義對象間的一種 一對多 的依賴關系, 當一個對象的狀態發生改變時, 所有依賴于它的對象都將得到通知 簡單實現 // 定...

    klivitamJ 評論0 收藏0
  • JavaScript - 收藏集 - 掘金

    摘要:插件開發前端掘金作者原文地址譯者插件是為應用添加全局功能的一種強大而且簡單的方式。提供了與使用掌控異步前端掘金教你使用在行代碼內優雅的實現文件分片斷點續傳。 Vue.js 插件開發 - 前端 - 掘金作者:Joshua Bemenderfer原文地址: creating-custom-plugins譯者:jeneser Vue.js插件是為應用添加全局功能的一種強大而且簡單的方式。插....

    izhuhaodev 評論0 收藏0
  • Backbone.js學習筆記(一)

    摘要:它通過數據模型進行鍵值綁定及事件處理,通過模型集合器提供一套豐富的用于枚舉功能,通過視圖來進行事件處理及與現有的通過接口進行交互。 本人兼職前端付費技術顧問,如需幫助請加本人微信hawx1993或QQ345823102,非誠勿擾 1.為初學前端而不知道怎么做項目的你指導 2.指導并扎實你的JavaScript基礎 3.幫你準備面試并提供相關指導性意見 4.為你的前端之路提供極具建設性的...

    FrancisSoung 評論0 收藏0

發表評論

0條評論

tommego

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<