国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

設(shè)計(jì)模式 ~ 發(fā)布訂閱模式

這篇具有很好參考價(jià)值的文章主要介紹了設(shè)計(jì)模式 ~ 發(fā)布訂閱模式。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

概念

用于實(shí)現(xiàn)對(duì)象之間的松耦合通信;
在該模式中,存在一個(gè)或多個(gè)發(fā)布者(Publishers)和一個(gè)或多個(gè)訂閱者(Subscribers);
發(fā)布者負(fù)責(zé)發(fā)布消息,而訂閱者負(fù)責(zé)訂閱感興趣的消息并在接收到消息時(shí)做出相應(yīng)的處理。

對(duì)比觀察者模式

Subject 和 Observer 直接綁定,中間無媒介;
Publisher 和 Observer 相互不認(rèn)識(shí),中間有媒介;
設(shè)計(jì)模式 ~ 發(fā)布訂閱模式,設(shè)計(jì)模式,javascript

演示

on 方法:訂閱者可以注冊(cè)自己來接收特定事件的通知;
off 方法:訂閱者可以取消對(duì)特定事件的訂閱;
emit 方法:發(fā)布者可以發(fā)布特定事件及其相關(guān)的數(shù)據(jù)。

class PubSub {
  subscribers = {}
  // 訂閱
  on(eventName, callback) {
    if (!this.subscribers[eventName]) {
      this.subscribers[eventName] = []
    }
    this.subscribers[eventName].push(callback)
  }
  // 取消訂閱
  off(eventName, callback) {
    if (this.subscribers[eventName]) {
      // 訂閱函數(shù)的索引
      const index = this.subscribers[eventName].findIndex(item => item === callback)
      if (index !== -1) {
        this.subscribers[eventName].splice(index, 1)
      }
    }
  }
  // 發(fā)布
  emit(eventName, data) {
    if (this.subscribers[eventName]) {
      this.subscribers[eventName].forEach(callback => {
        callback(data)
      })
    }
  }
}
const pubsub = new PubSub()
function fn1(data) {
  console.log('訂閱1收到', data)
}
function fn2(data) {
  console.log('訂閱2收到', data)
}
pubsub.on('message', fn1) // 訂閱
pubsub.on('message', fn2) // 訂閱
pubsub.emit('message', '發(fā)布的消息') // 發(fā)布
console.log(pubsub)
pubsub.off('message', fn2) // 取消訂閱

VUE

Vue2 實(shí)例本身就支持自定義事件,但 Vue3 不再支持;
推薦使用 mitt ,https://github.com/developit/mitt;
mitt 沒有 once ,也可以使用 event-emitter https://www.npmjs.com/package/event-emitter

創(chuàng)建單獨(dú)的 .js 文件、保證單例性

import mitt from 'mitt'
const emitter = mitt() // 單例
export default emitter

發(fā)布和訂閱

emitter.on('change', () => {
    console.log('change')
})
emitter.emit('change')

即時(shí)銷毀文章來源地址http://www.zghlxwxcb.cn/news/detail-593146.html

created() {
    emitter.on('change', this.fn)
},
beforeUnmount() {
    emitter.off('change', this.fn)
}

到了這里,關(guān)于設(shè)計(jì)模式 ~ 發(fā)布訂閱模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • js設(shè)計(jì)模式——發(fā)布訂閱模式

    一、概述 發(fā)布訂閱模式是一種常用的設(shè)計(jì)模式,它定義了一種一對(duì)多的關(guān)系,讓多個(gè)訂閱者對(duì)象同時(shí)監(jiān)聽某一個(gè)主題對(duì)象,當(dāng)主題對(duì)象發(fā)生變化時(shí),它會(huì)通知所有訂閱者對(duì)象,使它們能夠自動(dòng)更新 。 二、優(yōu)缺點(diǎn) 1. 優(yōu)點(diǎn): 實(shí)現(xiàn)了發(fā)布者和訂閱者之間的解耦,提高了代碼的可

    2024年02月06日
    瀏覽(89)
  • 設(shè)計(jì)模式之觀察者(發(fā)布訂閱)模式

    設(shè)計(jì)模式之觀察者(發(fā)布訂閱)模式

    觀察者模式定義了一種一對(duì)多的依賴關(guān)系,讓多個(gè)觀察者對(duì)象同事監(jiān)聽某一個(gè)主題對(duì)象。這個(gè)主題對(duì)象在狀態(tài)發(fā)生變化時(shí),會(huì)通知所有觀察者對(duì)象,使它們能夠自動(dòng)更新自己 觀察者模式主要解決的問題: 當(dāng)一個(gè)對(duì)象狀態(tài)發(fā)生改變后給其他的對(duì)象通知 觀察者的優(yōu)點(diǎn): 觀察者和

    2024年02月07日
    瀏覽(86)
  • 設(shè)計(jì)模式(四) —— 觀察者模式/發(fā)布訂閱模式,c和c++示例代碼

    往期地址: 設(shè)計(jì)模式(一)——簡(jiǎn)單工廠模式 設(shè)計(jì)模式(二)——策略模式 設(shè)計(jì)模式(三)——裝飾模式 本期主題: 使用c和c++代碼,講解觀察者模式、發(fā)布訂閱模式 發(fā)布-訂閱模式是一種行為設(shè)計(jì)模式,它允許多個(gè)對(duì)象通過事件的發(fā)布和訂閱來進(jìn)行通信; 在這種模式中,

    2023年04月17日
    瀏覽(93)
  • RabbitMQ學(xué)習(xí)——發(fā)布訂閱/fanout模式 & topic模式 & rabbitmq回調(diào)確認(rèn) & 延遲隊(duì)列(死信)設(shè)計(jì)

    RabbitMQ學(xué)習(xí)——發(fā)布訂閱/fanout模式 & topic模式 & rabbitmq回調(diào)確認(rèn) & 延遲隊(duì)列(死信)設(shè)計(jì)

    1.rabbitmq隊(duì)列方式的梳理,點(diǎn)對(duì)點(diǎn),一對(duì)多; 2.發(fā)布訂閱模式,交換機(jī)到消費(fèi)者,以郵箱和手機(jī)驗(yàn)證碼為例; 3.topic模式,根據(jù)規(guī)則決定發(fā)送給哪個(gè)隊(duì)列; 4.rabbitmq回調(diào)確認(rèn),setConfirmCallback和setReturnsCallback; 5.死信隊(duì)列,延遲隊(duì)列,創(chuàng)建方法,正?!佬?,設(shè)置延遲時(shí)間; 點(diǎn)對(duì)

    2024年02月13日
    瀏覽(92)
  • RabbitMQ基礎(chǔ)(2)——發(fā)布訂閱/fanout模式 & topic模式 & rabbitmq回調(diào)確認(rèn) & 延遲隊(duì)列(死信)設(shè)計(jì)

    RabbitMQ基礎(chǔ)(2)——發(fā)布訂閱/fanout模式 & topic模式 & rabbitmq回調(diào)確認(rèn) & 延遲隊(duì)列(死信)設(shè)計(jì)

    1.rabbitmq隊(duì)列方式的梳理,點(diǎn)對(duì)點(diǎn),一對(duì)多; 2.發(fā)布訂閱模式,交換機(jī)到消費(fèi)者,以郵箱和手機(jī)驗(yàn)證碼為例; 3.topic模式,根據(jù)規(guī)則決定發(fā)送給哪個(gè)隊(duì)列; 4.rabbitmq回調(diào)確認(rèn),setConfirmCallback和setReturnsCallback; 5.死信隊(duì)列,延遲隊(duì)列,創(chuàng)建方法,正?!佬?,設(shè)置延遲時(shí)間; 點(diǎn)對(duì)

    2024年02月10日
    瀏覽(98)
  • 4.設(shè)計(jì)模式之后七種模式后11種模式命令訪問者迭代器發(fā)布訂閱中介者忘備錄解釋器狀態(tài)策略職責(zé)鏈和空模式

    4.設(shè)計(jì)模式之后七種模式后11種模式命令訪問者迭代器發(fā)布訂閱中介者忘備錄解釋器狀態(tài)策略職責(zé)鏈和空模式

    1.命令(command)模式 不知道命令接收者(對(duì)象)是誰,支持撤銷 (接受者 間接調(diào)用執(zhí)行 的具體行為) 命令調(diào)用者和接收者解耦 //只要實(shí)現(xiàn)命令接口即可 (就是客戶端給個(gè)命令,然后命令類傳給接收類執(zhí)行) 優(yōu)點(diǎn)和缺點(diǎn) 容易撤銷操作 命令隊(duì)列可以多線程操作 增加過多的命令類 空命令也

    2024年02月12日
    瀏覽(96)
  • JavaScript 簡(jiǎn)單實(shí)現(xiàn)觀察者模式和發(fā)布-訂閱模式

    JavaScript 簡(jiǎn)單實(shí)現(xiàn)觀察者模式和發(fā)布-訂閱模式

    大家好,我是南木元元,熱衷分享有趣實(shí)用的文章。今天來聊聊設(shè)計(jì)模式中常用的觀察者模式和發(fā)布-訂閱模式。 觀察者模式定義對(duì)象間的一種一對(duì)多的依賴關(guān)系,當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生改變時(shí),所有依賴于它的對(duì)象都將得到通知。 如何理解這句話呢?來舉個(gè)生活中的例子

    2024年02月12日
    瀏覽(638)
  • 【JavaScript】手撕前端面試題:寄生組合式繼承 | 發(fā)布訂閱模式 | 觀察者模式

    ?????個(gè)人簡(jiǎn)介:大三學(xué)生,一個(gè)不甘平庸的平凡人?? ??? NodeJS專欄:Node.js從入門到精通 ??? 博主的前端之路(源創(chuàng)征文一等獎(jiǎng)作品):前端之行,任重道遠(yuǎn)(來自大三學(xué)長(zhǎng)的萬字自述) ??? TypeScript知識(shí)總結(jié):TypeScript從入門到精通(十萬字超詳細(xì)知識(shí)點(diǎn)總結(jié)) ??

    2023年04月08日
    瀏覽(96)
  • 前端設(shè)計(jì)模式:工廠方法模式、單例模式、訂閱模式、中介者模式

    工廠方法模式是一種創(chuàng)建型設(shè)計(jì)模式,它提供了一種將對(duì)象的創(chuàng)建與使用分離的方式。在工廠方法模式中,我們定義一個(gè)工廠接口,該接口聲明了一個(gè)用于創(chuàng)建對(duì)象的方法。具體的對(duì)象創(chuàng)建則由實(shí)現(xiàn)該接口的具體工廠類來完成。 工廠方法模式的核心思想是將對(duì)象的創(chuàng)建延遲到

    2024年02月12日
    瀏覽(91)
  • javaScript---設(shè)計(jì)模式-設(shè)計(jì)模式概論

    (1)幫助我們組織模塊(2)幫助我們?cè)O(shè)計(jì)溝通(3)提高代碼質(zhì)量 開閉原則:對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉 單一職責(zé)原則:一個(gè)模塊只做一件事情 依賴倒置原則:上層模塊不要依賴具體的下層模塊,而應(yīng)該依賴于抽象 接口隔離原則:接口功能單一,能力單一,細(xì)化接口,接口功

    2024年02月03日
    瀏覽(37)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包