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

觀察者模式和發(fā)布訂閱模式的區(qū)別

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

從下圖中可以看出,觀察者模式中觀察者和目標(biāo)直接進(jìn)行交互,而發(fā)布訂閱模式中統(tǒng)一由調(diào)度中心進(jìn)行處理,訂閱者和發(fā)布者互不干擾。這樣一方面實(shí)現(xiàn)了解耦,還有就是可以實(shí)現(xiàn)更細(xì)粒度的一些控制。比如發(fā)布者發(fā)布了很多消息,但是不想所有的訂閱者都接收到,就可以在調(diào)度中心做一些處理,類似于權(quán)限控制之類的。還可以做一些節(jié)流操作。

觀察者模式和發(fā)布訂閱模式的區(qū)別,面試啊,vue 問題,觀察者模式

二 概念上的區(qū)別

1.觀察者模式,目標(biāo)和觀察者是基類,目標(biāo)提供維護(hù)觀察者的一系列方法,觀察者提供更新接口。具體觀察者和具體目標(biāo)繼承各自的基類,然后具體觀察者把自己注冊到具體目標(biāo)里,在具體目標(biāo)發(fā)生變化時(shí)候,調(diào)度觀察者的更新方法。

比如有個(gè)“天氣中心”的具體目標(biāo)A,專門監(jiān)聽天氣變化,而有個(gè)顯示天氣的界面的觀察者B,B就把自己注冊到A里,當(dāng)A觸發(fā)天氣變化,就調(diào)度B的更新方法,并帶上自己的上下文。

2.發(fā)布訂閱,訂閱者把自己想訂閱的事件注冊到調(diào)度中心,當(dāng)該事件觸發(fā)時(shí)候,發(fā)布者發(fā)布該事件到調(diào)度中心(順帶上下文),由調(diào)度中心統(tǒng)一調(diào)度訂閱者注冊到調(diào)度中心的處理代碼。

比如有個(gè)界面是實(shí)時(shí)顯示天氣,它就訂閱天氣事件(注冊到調(diào)度中心,包括處理程序),當(dāng)天氣變化時(shí)(定時(shí)獲取數(shù)據(jù)),就作為發(fā)布者發(fā)布天氣信息到調(diào)度中心,調(diào)度中心就調(diào)度訂閱者的天氣處理程序。

三、發(fā)布訂閱模式簡介

1)定義和原理
發(fā)布訂閱模式是一種消息傳遞模式,其中發(fā)布者發(fā)布消息,而訂閱者接收和處理這些消息。它是一種松耦合的通信方式,允許發(fā)布者和訂閱者在不知道彼此存在的情況下進(jìn)行通信。

發(fā)布訂閱模式的原理基于消息隊(duì)列或主題,發(fā)布者將消息發(fā)布到特定的消息隊(duì)列或主題中,而訂閱者可以訂閱這些消息隊(duì)列或主題以接收和處理消息。發(fā)布者和訂閱者之間的通信是異步的,這意味著發(fā)布者發(fā)布消息后,訂閱者可以在任何時(shí)候接收和處理消息。

發(fā)布訂閱模式的核心思想是將發(fā)布者和訂閱者解耦,使得它們可以獨(dú)立地運(yùn)行和擴(kuò)展。這種解耦有助于提高系統(tǒng)的靈活性和可伸縮性,因?yàn)榘l(fā)布者和訂閱者可以根據(jù)需要進(jìn)行擴(kuò)展和修改,而不會(huì)影響彼此的操作。

發(fā)布訂閱模式在許多領(lǐng)域都有應(yīng)用,如

  • 消息隊(duì)列
  • 事件驅(qū)動(dòng)架構(gòu)
  • 實(shí)時(shí)數(shù)據(jù)更新
  • 消息推送

觀察者模式和發(fā)布訂閱模式的區(qū)別,面試啊,vue 問題,觀察者模式

它是一種非常有用的通信模式,可以幫助開發(fā)人員構(gòu)建高效、可靠和可擴(kuò)展的系統(tǒng)。

2) 發(fā)布訂閱模式的優(yōu)勢
發(fā)布訂閱模式具有以下優(yōu)勢:
  1. 解耦:發(fā)布者和訂閱者是松耦合的,它們可以獨(dú)立地運(yùn)行和擴(kuò)展,而不會(huì)相互影響。
  2. 靈活性:發(fā)布者可以隨時(shí)發(fā)布消息,而訂閱者可以隨時(shí)訂閱和取消訂閱消息,這使得系統(tǒng)更加靈活。
  3. 可伸縮性:發(fā)布者和訂閱者可以根據(jù)需要進(jìn)行擴(kuò)展和修改,而不會(huì)影響彼此的操作。
  4. 異步通信:發(fā)布者和訂閱者之間的通信是異步的,這意味著發(fā)布者發(fā)布消息后,訂閱者可以在任何時(shí)候接收和處理消息。
  5. 消息過濾:訂閱者可以根據(jù)自己的需求訂閱特定的消息,從而實(shí)現(xiàn)消息過濾。
  6. 可靠性:發(fā)布訂閱模式通常使用消息隊(duì)列或主題來存儲(chǔ)消息,這可以確保消息不會(huì)丟失,并且可以在訂閱者不可用時(shí)進(jìn)行存儲(chǔ)。
  7. 分布式系統(tǒng):發(fā)布訂閱模式可以在分布式系統(tǒng)中使用,從而實(shí)現(xiàn)跨節(jié)點(diǎn)的通信。

?觀察者模式和發(fā)布訂閱模式的區(qū)別,面試啊,vue 問題,觀察者模式

四、發(fā)布訂閱模式的實(shí)現(xiàn)

1)消息隊(duì)列
發(fā)布訂閱模式可以使用消息隊(duì)列來實(shí)現(xiàn)。消息隊(duì)列是一種存儲(chǔ)和轉(zhuǎn)發(fā)消息的技術(shù),它可以在發(fā)布者和訂閱者之間提供異步通信。

在發(fā)布訂閱模式中,發(fā)布者將消息發(fā)布到消息隊(duì)列中,而訂閱者可以從消息隊(duì)列中接收和處理消息。消息隊(duì)列可以作為發(fā)布者和訂閱者之間的中間件,它可以確保消息的可靠性和有序性。

使用消息隊(duì)列實(shí)現(xiàn)發(fā)布訂閱模式的步驟如下:

  1. 創(chuàng)建消息隊(duì)列:創(chuàng)建一個(gè)消息隊(duì)列來存儲(chǔ)和轉(zhuǎn)發(fā)消息。
  2. 發(fā)布消息:發(fā)布者將消息發(fā)布到消息隊(duì)列中。
  3. 訂閱消息:訂閱者訂閱消息隊(duì)列以接收和處理消息。
  4. 處理消息:訂閱者從消息隊(duì)列中接收消息并進(jìn)行處理。

觀察者模式和發(fā)布訂閱模式的區(qū)別,面試啊,vue 問題,觀察者模式

在實(shí)現(xiàn)發(fā)布訂閱模式時(shí),需要考慮以下幾個(gè)方面:

  1. 消息隊(duì)列的選擇:根據(jù)需求選擇合適的消息隊(duì)列,如 RabbitMQ、Kafka 等。
  2. 消息的格式:定義消息的格式,以便發(fā)布者和訂閱者能夠理解和處理消息。
  3. 消息的發(fā)布和訂閱:確定發(fā)布者和訂閱者如何發(fā)布和訂閱消息。
  4. 消息的處理:訂閱者需要根據(jù)自己的需求處理消息,如數(shù)據(jù)處理、日志記錄等。
  5. 消息的可靠性:考慮如何確保消息的可靠性,如消息確認(rèn)、消息重試等。
  6. 消息的有序性:考慮如何確保消息的有序性,如消息排序、消息分組等。

觀察者模式和發(fā)布訂閱模式的區(qū)別,面試啊,vue 問題,觀察者模式

總之,使用消息隊(duì)列實(shí)現(xiàn)發(fā)布訂閱模式可以提供高效、可靠和可擴(kuò)展的通信方式。在實(shí)現(xiàn)時(shí),需要根據(jù)具體需求進(jìn)行選擇和配置。

2)發(fā)布訂閱者
在發(fā)布訂閱模式中,發(fā)布者和訂閱者是兩個(gè)獨(dú)立的實(shí)體,它們通過某種通信渠道(如消息隊(duì)列)進(jìn)行交互。

發(fā)布者負(fù)責(zé)將消息發(fā)布到通信渠道中,而訂閱者則負(fù)責(zé)從通信渠道中接收和處理消息。發(fā)布者和訂閱者之間的通信是異步的,這意味著發(fā)布者發(fā)布消息后,訂閱者可以在任何時(shí)候接收和處理消息。

以下是使用發(fā)布訂閱模式實(shí)現(xiàn)發(fā)布者和訂閱者的基本步驟:

  1. 創(chuàng)建通信渠道:創(chuàng)建一個(gè)消息隊(duì)列或主題來存儲(chǔ)和轉(zhuǎn)發(fā)消息。
  2. 發(fā)布消息:發(fā)布者將消息發(fā)布到通信渠道中。
  3. 訂閱消息:訂閱者訂閱通信渠道以接收和處理消息。
  4. 處理消息:訂閱者從通信渠道中接收消息并進(jìn)行處理。

在實(shí)現(xiàn)發(fā)布訂閱模式時(shí),需要考慮以下幾個(gè)方面:

  1. 通信渠道的選擇:根據(jù)需求選擇合適的通信渠道,如消息隊(duì)列、主題等。
  2. 消息的格式:定義消息的格式,以便發(fā)布者和訂閱者能夠理解和處理消息。
  3. 消息的發(fā)布和訂閱:確定發(fā)布者和訂閱者如何發(fā)布和訂閱消息。
  4. 消息的處理:訂閱者需要根據(jù)自己的需求處理消息,如數(shù)據(jù)處理、日志記錄等。
  5. 消息的可靠性:考慮如何確保消息的可靠性,如消息確認(rèn)、消息重試等。
  6. 消息的有序性:考慮如何確保消息的有序性,如消息排序、消息分組等。
  7. 總之,發(fā)布訂閱模式實(shí)現(xiàn)發(fā)布者和訂閱者之間的通信,提供了一種高效、可靠和可擴(kuò)展的通信方式。在實(shí)現(xiàn)時(shí),需要根據(jù)具體需求進(jìn)行選擇和配置。
3)消息主題
在發(fā)布訂閱模式中,消息主題是用于發(fā)布和訂閱消息的標(biāo)識符。它是發(fā)布者和訂閱者之間的橋梁,用于定義訂閱者感興趣的消息類型。

以下是使用消息主題實(shí)現(xiàn)發(fā)布訂閱模式的基本步驟:

  1. 創(chuàng)建消息主題:創(chuàng)建一個(gè)唯一的消息主題來標(biāo)識要發(fā)布的消息類型。
  2. 發(fā)布消息:發(fā)布者將消息發(fā)布到特定的消息主題中。
  3. 訂閱消息:訂閱者訂閱特定的消息主題以接收和處理消息。
  4. 處理消息:訂閱者從訂閱的消息主題中接收消息并進(jìn)行處理。

在實(shí)現(xiàn)發(fā)布訂閱模式時(shí),需要考慮以下幾個(gè)方面:

  1. 消息主題的設(shè)計(jì):設(shè)計(jì)合適的消息主題,以便發(fā)布者和訂閱者能夠理解和處理消息。
  2. 消息的發(fā)布和訂閱:確定發(fā)布者和訂閱者如何發(fā)布和訂閱消息主題。
  3. 消息的處理:訂閱者需要根據(jù)自己的需求處理消息,如數(shù)據(jù)處理、日志記錄等。
  4. 消息的可靠性:考慮如何確保消息的可靠性,如消息確認(rèn)、消息重試等。
  5. 消息的有序性:考慮如何確保消息的有序性,如消息排序、消息分組等。

總之,消息主題是發(fā)布訂閱模式中的重要概念,用于定義發(fā)布者和訂閱者之間的通信。在實(shí)現(xiàn)時(shí),需要根據(jù)具體需求進(jìn)行選擇和配置。

五、發(fā)布訂閱模式的

  1. 應(yīng)用場景
  2. 實(shí)時(shí)數(shù)據(jù)更新
  3. 消息推送
  4. 事件驅(qū)動(dòng)架構(gòu)
  5. 注意事項(xiàng)
  6. 消息丟失和重復(fù)
  7. 消息順序問題
  8. 消息過期問題

六 總結(jié)

1. 最大的區(qū)別是調(diào)度的地方。

雖然兩種模式都存在訂閱者和發(fā)布者(具體觀察者可認(rèn)為是訂閱者、具體目標(biāo)可認(rèn)為是發(fā)布者),但是觀察者模式是由具體目標(biāo)調(diào)度的,而發(fā)布/訂閱模式是統(tǒng)一由調(diào)度中心調(diào)的,所以觀察者模式的訂閱者與發(fā)布者之間是存在依賴的,而發(fā)布/訂閱模式則不會(huì)。2. 兩種模式都可以用于松散耦合,改進(jìn)代碼管理和潛在的復(fù)用。

七,?代碼如下

觀察者模式

// 觀察者
class Observer {
    constructor() {
 
    }
    update(val) {
 
    }
}
// 觀察者列表
class ObserverList {
    constructor() {
        this.observerList = []
    }
    add(observer) {
        return this.observerList.push(observer);
    }
    remove(observer) {
        this.observerList = this.observerList.filter(ob => ob !== observer);
    }
    count() {
        return this.observerList.length;
    }
    get(index) {
        return this.observerList(index);
    }
}
// 目標(biāo)
class Subject {
    constructor() {
        this.observers = new ObserverList();
    }
    addObserver(observer) {
        this.observers.add(observer);
    }
    removeObserver(observer) {
        this.observers.remove(observer);
    }
    notify(...args) {
        let obCount = this.observers.count();
        for (let index = 0; index < obCount; index++) {
            this.observers.get(i).update(...args);
        }
    }
}

?發(fā)布/訂閱模式文章來源地址http://www.zghlxwxcb.cn/news/detail-836298.html

class PubSub {
    constructor() {
        this.subscribers = {}
    }
    subscribe(type, fn) {
        if (!Object.prototype.hasOwnProperty.call(this.subscribers, type)) {
          this.subscribers[type] = [];
        }
        
        this.subscribers[type].push(fn);
    }
    unsubscribe(type, fn) {
        let listeners = this.subscribers[type];
        if (!listeners || !listeners.length) return;
        this.subscribers[type] = listeners.filter(v => v !== fn);
    }
    publish(type, ...args) {
        let listeners = this.subscribers[type];
        if (!listeners || !listeners.length) return;
        listeners.forEach(fn => fn(...args));        
    }
}
 
let ob = new PubSub();
ob.subscribe('add', (val) => console.log(val));
ob.publish('add', 1);

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

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

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

相關(guān)文章

  • 觀察者模式, 發(fā)布-訂閱模式, 監(jiān)聽器模式

    觀察者模式, 發(fā)布-訂閱模式, 監(jiān)聽器模式

    觀察者模式是一種 行為型 設(shè)計(jì)模式, 定義對象間的一種 一對多 的依賴關(guān)系,當(dāng)一個(gè)對象的狀態(tài)發(fā)生改變時(shí),所有依賴于它的對象都得到通知并被自動(dòng)更新 角色模型和結(jié)構(gòu)圖 在觀察者模式中,只有兩種主體:目標(biāo)對象 ( Object ) 和 觀察者 ( Observer )。宗門任務(wù)大殿就是目標(biāo)對象

    2024年02月22日
    瀏覽(88)
  • C++之觀察者模式(發(fā)布-訂閱)

    C++之觀察者模式(發(fā)布-訂閱)

    目錄 模式簡介 介紹 優(yōu)點(diǎn) 缺點(diǎn) 代碼實(shí)現(xiàn) 場景說明 實(shí)現(xiàn)代碼 運(yùn)行結(jié)果 觀察者模式( Observer Pattern ) ,也叫我們熟知的 發(fā)布-訂閱模式。 它是一種 行為型模式。 介紹 觀察者模式主要關(guān)注的是對象的一對多的關(guān)系, 也就是多個(gè)對象依賴于一個(gè)對象,當(dāng)該對象的 狀態(tài)發(fā)生改變

    2024年02月15日
    瀏覽(93)
  • 觀察者模式、中介者模式和發(fā)布訂閱模式

    觀察者模式、中介者模式和發(fā)布訂閱模式

    觀察者模式定義了對象間的一種一對多的依賴關(guān)系,當(dāng)一個(gè)對象的狀態(tài)發(fā)生改變時(shí),所有依賴于它的對象都將得到通知,并自動(dòng)更新 觀察者模式屬于行為型模式,行為型模式關(guān)注的是對象之間的通訊,觀察者模式就是觀察者和被觀察者之間的通訊 例如生活中,我們可以用報(bào)

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

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

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

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

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

    2023年04月17日
    瀏覽(93)
  • 【RxJava】RxJava 簡介 ( RxJava 概念 | RxJava 組成 - 被觀察者 / 觀察者 / 訂閱 / 操作符 | RxJava 適用場景 )

    RxJava 框架 是一個(gè) 異步編程函數(shù)庫 , 包含了如下要素 : 觀察者模式 迭代器模式 函數(shù)式編程 RxJava 框架應(yīng)用場景 : 異步操作 事件流 RxJava 組成要素 : Observable(被觀察者): Observable 是一個(gè) 可以發(fā)送消息的數(shù)據(jù)源 , 可以同時(shí)發(fā)送若干消息 , 消息的格式可以通過泛型進(jìn)行定義 ; 消

    2024年02月06日
    瀏覽(23)
  • 觀察者模式(上):詳解各種應(yīng)用場景下觀察者模式的不同實(shí)現(xiàn)方式

    ????????從今天起,我們開始學(xué)習(xí)行為型設(shè)計(jì)模式。我們知道,創(chuàng)建型設(shè)計(jì)模式主要解決“對象的創(chuàng)建”問題,結(jié)構(gòu)型設(shè)計(jì)模式主要解決“類或?qū)ο蟮慕M合或組裝”問題,那行為型設(shè)計(jì)模式主要解決的就是“ 類或?qū)ο笾g的交互 ”問題。 原理及應(yīng)用場景剖析 在對象之間

    2024年02月16日
    瀏覽(85)
  • 【C++ 觀察者模式 思想理解】C++中的觀察者模式:松耦合設(shè)計(jì)與動(dòng)態(tài)交互的藝術(shù),合理使用智能指針觀察者

    【C++ 觀察者模式 思想理解】C++中的觀察者模式:松耦合設(shè)計(jì)與動(dòng)態(tài)交互的藝術(shù),合理使用智能指針觀察者

    在進(jìn)入技術(shù)細(xì)節(jié)之前,理解觀察者模式(Observer Pattern)的基本概念和它在現(xiàn)代編程中的重要性是至關(guān)重要的。 觀察者模式是一種設(shè)計(jì)模式,它定義了對象間的一種一對多的依賴關(guān)系,當(dāng)一個(gè)對象的狀態(tài)發(fā)生改變時(shí),所有依賴于它的對象都得到通知并自動(dòng)更新。在C++中,這個(gè)

    2024年01月24日
    瀏覽(48)
  • 設(shè)計(jì)模式——觀察者模式

    設(shè)計(jì)模式——觀察者模式

    觀察者模式可以分為觀察者和被觀察者,觀察者通過注冊到一個(gè)被觀察者中,也可視為訂閱,當(dāng)被觀察者的數(shù)據(jù)發(fā)生改變時(shí),會(huì)通知到觀察者,觀察者可以據(jù)此做出反應(yīng)。 可以類比訂閱報(bào)紙,報(bào)社就是被觀察者,訂閱者就是觀察者,訂閱者通過訂閱報(bào)紙與報(bào)社建立聯(lián)系,而報(bào)

    2024年02月15日
    瀏覽(17)
  • 【設(shè)計(jì)模式】觀察者模式

    【設(shè)計(jì)模式】觀察者模式

    觀察者模式(又被稱為發(fā)布-訂閱(Publish/Subscribe)模式,屬于行為型模式的一種,它定義了一種一對多的依賴關(guān)系,讓多個(gè)觀察者對象同時(shí)監(jiān)聽某一個(gè)主題對象。這個(gè)主題對象在狀態(tài)變化時(shí),會(huì)通知所有的觀察者對象,使他們能夠自動(dòng)更新自己。 Subject:抽象主題(被觀察者

    2024年02月13日
    瀏覽(20)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包