js 觀察者和訂閱發布模式

2022-06-17 04:36:08 字數 1077 閱讀 6543

之前一直都認為觀察者模式和發布訂閱模式是一回事,包括網上的很多文章也是這麼寫的,但有一次面試中被問到兩者的區別,直接懵了答不出來,經過最近的一些學習,慢慢理解了兩者的不同。

在我看來,兩者最主要的區別在於是否有中間的排程中心。

觀察者模式把訂閱者維護在發布者這裡,需要發布訊息時直接發訊息給訂閱者。在觀察者模式中,發布者本身是知道訂閱者存在的。

而發布/訂閱模式中,發布者並不維護訂閱者,也不知道訂閱者的存在,所以也不會直接通知訂閱者,而是通知排程中心,由排程中心通知訂閱者。

由以上的描述可以看出,發布訂閱模式是鬆散耦合的,而觀察者模式強耦合。

觀察者模式的場景:vue的依賴追蹤,原生事件。

發布訂閱模式的場景: react的合成事件,vue元件間通訊的eventbus。

觀察者模式的乙個例子:

class observer 

}class subject

addobserver (observer)

removeobserver (observer)

notify () )

}}var subject = new

subject()

var ob1 = new observer(function

() )

subject.addobserver(ob1)

var ob2 = new observer(function

() )

subject.addobserver(ob2)

subject.notify()

發布/訂閱模式:

class eventbus 

on (event, fn)

off (event, fn)

else

} fire (event)

}var bus = new

eventbus()

bus.on('onclick', function

() )

bus.on('onclick', fn=function

() )

bus.fire('onclick')

js觀察者模式發布 訂閱

實習期結束,最近回到學校開始學習node.js,node果然是強大。不過在涉及到檔案操作的時候,發現要大量使用非同步回掉操作。以前在寫頁面的時候,從沒這麼多非同步操作,只有在使用 setinterval 和 xmlhttprequest 時了解了一下非同步程式設計。這次在學習node的過程中,把非同...

觀察者模式和發布訂閱模式(JS)

最近被人問到設計模式,觀察者 observer 模式和發布 publish 訂閱 subscribe 模式二者有什麼區別。其實這兩種模式還是有些許差異的,本質上的區別是排程的方式不同。觀察者模式,目標和觀察者是基類,目標提供維護觀察者的一系列方法,觀察者提供更新介面。具體觀察者和具體目標繼承各自的基...

js 發布 訂閱模式(觀察者模式)

物件間的一種一對多的關係,當乙個物件發生改變時,所有依賴它的物件都會得到通知。比如wb上的明星和其粉絲的關係,粉絲在wb上訂閱了明星,所以當明星在wb上發表動態時所有粉絲都將得到通知。js具體實現 事件 有三個角色 訂閱者 subscriber 訊息分發器 msgdistributor wb例子 d...