91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

web前端中觀察者模式的示例分析

發布時間:2022-03-24 15:04:08 來源:億速云 閱讀:171 作者:小新 欄目:web開發

這篇文章給大家分享的是有關web前端中觀察者模式的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

觀察者模式(Observer Pattern)

觀察者模式又稱發布-訂閱模式(Publish/Subscribe Pattern),是我們經常接觸到的設計模式,日常生活中的應用也比比皆是,比如你訂閱了某個博主的頻道,當有內容更新時會收到推送;又比如JavaScript中的事件訂閱響應機制。觀察者模式的思想用一句話描述就是:被觀察對象(subject)維護一組觀察者(observer),當被觀察對象狀態改變時,通過調用觀察者的某個方法將這些變化通知到觀察者

觀察者模式中Subject對象一般需要實現以下API:

  • subscribe(): 接收一個觀察者observer對象,使其訂閱自己

  • unsubscribe(): 接收一個觀察者observer對象,使其取消訂閱自己

  • fire(): 觸發事件,通知到所有觀察者

用JavaScript手動實現觀察者模式:

// 被觀察者function Subject() {
  this.observers = [];}Subject.prototype = {
  // 訂閱
  subscribe: function (observer) {
    this.observers.push(observer);
  },
  // 取消訂閱
  unsubscribe: function (observerToRemove) {
    this.observers = this.observers.filter(observer => {
      return observer !== observerToRemove;
    })
  },
  // 事件觸發
  fire: function () {
    this.observers.forEach(observer => {
      observer.call();
    });
  }}

驗證一下訂閱是否成功:

const subject = new Subject();function observer1() {
  console.log('Observer 1 Firing!');}function observer2() {
  console.log('Observer 2 Firing!');}subject.subscribe(observer1);subject.subscribe(observer2);subject.fire();
  //輸出:Observer 1 Firing! Observer 2 Firing!

驗證一下取消訂閱是否成功:

subject.unsubscribe(observer2);subject.fire();//輸出:Observer 1 Firing!

場景

  • DOM事件

document.body.addEventListener('click', function() {
    console.log('hello world!');});document.body.click()
  • vue 響應式

優點

  • 支持簡單的廣播通信,自動通知所有已經訂閱過的對象

  • 目標對象與觀察者之間的抽象耦合關系能單獨擴展以及重用

  • 增加了靈活性

  • 觀察者模式所做的工作就是在解耦,讓耦合的雙方都依賴于抽象,而不是依賴于具體。從而使得各自的變化都不會影響到另一邊的變化。

缺點

  • 過度使用會導致對象與對象之間的聯系弱化,會導致程序難以跟蹤維護和理解

感謝各位的閱讀!關于“web前端中觀察者模式的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

web
AI

宁津县| 灌南县| 南城县| 罗平县| 桃园县| 鄂尔多斯市| 朝阳县| 历史| 灵武市| 昂仁县| 万载县| 高邑县| 泸水县| 呼玛县| 申扎县| 平谷区| 淮滨县| 日喀则市| 博野县| 中方县| 高台县| 武平县| 新密市| 京山县| 江西省| 永城市| 宜章县| 安阳县| 安徽省| 海门市| 五家渠市| 化德县| 阜新| 吴旗县| 荥阳市| 汪清县| 共和县| 奉新县| 阜康市| 西华县| 仁怀市|