js 設計模式 觀察者和發布訂閱模式

2022-07-26 02:30:14 字數 890 閱讀 4872

總是把這兩個當作同乙個模式,但其實是不太一樣的,現在重溫一下。

觀察者直接訂閱目標,當目標觸發事件時,通知觀察者進行更新

簡單實現

class observer 

update() update`)

}}class subject

add(observer)

notify() );

}}const sub = new subject();

const ob1 = new observer('ob1');

const ob2 = new observer('ob2');

// 觀察者訂閱目標

sub.add(ob1);

sub.add(ob2);

// 目標觸發事件

sub.notify();

發布訂閱模式通過乙個排程中心進行處理,使得訂閱者和發布者分離開來,互不干擾。

簡單實現

class event 

on(type, fn)

this.lists.get(type).push(fn);

} emit(type, ...args) );

}}const ev = new event();

// 訂閱

ev.on('msg', (msg) => console.log(msg));

// 發布

ev.emit('msg', '發布');

其實這兩個模式可以說是同一種設計模式的不同實現。

觀察者模式是觀察者和目標直接進行互動,有耦合性,而發布訂閱模式則是通過乙個排程中心進行處理,訂閱者和發布者互不干擾,進行了解耦。

js 觀察者和訂閱發布模式

之前一直都認為觀察者模式和發布訂閱模式是一回事,包括網上的很多文章也是這麼寫的,但有一次面試中被問到兩者的區別,直接懵了答不出來,經過最近的一些學習,慢慢理解了兩者的不同。在我看來,兩者最主要的區別在於是否有中間的排程中心。觀察者模式把訂閱者維護在發布者這裡,需要發布訊息時直接發訊息給訂閱者。在觀察...

js觀察者模式發布 訂閱

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

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

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