中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

惠来县| 沙田区| 邯郸县| 呼玛县| 阜南县| 兖州市| 叙永县| 虞城县| 盖州市| 三江| 嘉祥县| 普陀区| 察雅县| 焦作市| 杭锦后旗| 白银市| 辰溪县| 山丹县| 兰西县| 浏阳市| 论坛| 六安市| 久治县| 凌源市| 双牌县| 内江市| 聂拉木县| 汉沽区| 青浦区| 禹州市| 华安县| 宜昌市| 漳平市| 高密市| 淄博市| 蒲江县| 兰考县| 额济纳旗| 彰化市| 丰都县| 阜宁县|