觀察者模式 與 發布訂閱模式

2021-09-24 08:21:36 字數 2393 閱讀 6588

兩個模式的實現結構:

觀察者模式:觀察者(observer)直接訂閱(subscribe)主題(subject),而當主題被啟用的時候,會觸發(fire event)觀察者裡的事件。

觀察者模式定義了物件間的一種一對多的依賴關係,當乙個物件的狀態發生改變時,所有依賴於它的物件都將得到通知,並自動更新。觀察者模式屬於行為型模式,行為型模式關注的是物件之間的通訊,觀察者模式就是觀察者和被觀察者之間的通訊。

發布訂閱模式:訂閱者(subscriber)把自己想訂閱的事件註冊(subscribe)到排程中心(topic),當發布者(publisher)發布該事件(publish topic)到排程中心,也就是該事件觸發時,由排程中心統一排程(fire event)訂閱者註冊到排程中心的處理**。

發布訂閱模式中,稱為發布者的訊息傳送者不會將訊息直接傳送給訂閱者,這意味著發布者和訂閱者不知道彼此的存在。在發布者和訂閱者之間存在第三個元件,稱為訊息**或排程中心或中介軟體,它維持著發布者和訂閱者之間的聯絡,過濾所有發布者傳入的訊息並相應地分發它們給訂閱者。

**案例:(獵人發布與訂閱任務)

觀察者模式:

//有一家獵人工會,其中每個獵人都具有發布任務(publish),訂閱任務(subscribe)的功能

//他們都有乙個訂閱列表來記錄誰訂閱了自己

//定義乙個獵人類

//包括姓名,級別,訂閱列表

function hunter(name, level)

hunter.prototype.publish = function (money))

}hunter.prototype.subscribe = function (targrt, fn)

//獵人工會走來了幾個獵人

let hunterming = new hunter('小明', '**')

let hunterjin = new hunter('小金', '**')

let hunterzhang = new hunter('小張', '**')

let hunterpeter = new hunter('peter', '青銅')

//peter等級較低,可能需要幫助,所以小明,小金,小張都訂閱了peter

hunterming.subscribe(hunterpeter, function(money))

hunterjin.subscribe(hunterpeter, function

())hunterzhang.subscribe(hunterpeter, function

())//peter遇到困難,賞金198尋求幫助

hunterpeter.publish(198)

複製**

發布訂閱模式:

//定義一家獵人工會

//主要功能包括任務發布大廳(topics),以及訂閱任務(subscribe),發布任務(publish)

let hunterunion =

this.topics[topic].push(fn);

},publish: function (topic, money)

}}function hunter(name, level)

hunter.prototype.subscribe = function (topic, fn)

hunter.prototype.publish = function (topic, money)

//獵人工會走來了幾個獵人

let hunterming = new hunter('小明', '**')

let hunterjin = new hunter('小金', '**')

let hunterzhang = new hunter('小張', '**')

let hunterpeter = new hunter('peter', '青銅')

//peter等級較低,可能需要幫助,所以小明,小金,小張都訂閱了peter

hunterming.subscribe('tiger', function(money))

hunterjin.subscribe('tiger', function

())hunterzhang.subscribe('tiger', function

())hunterpeter.subscribe('sheep', function

())//peter發布了狩獵tiger的任務

hunterpeter.publish('tiger', 198)

//獵人們發布(發布者)或訂閱(觀察者/訂閱者)任務都是通過獵人工會(排程中心)關聯起來的,他們沒有直接的交流。

複製**

source

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

簡介 觀察者模式 又被稱為發布 訂閱 public subscribe 模式,屬於行為型模式的一種,它定義了一種一對多的依賴關係,讓多個觀察者物件同時監聽某乙個主題物件。這個主題物件再狀態變化時,會通知所有的觀察者物件,使他們能夠自動更新自己。塊 public 發布動態 button 觀察者 粉絲 ...

觀察者模式 訂閱發布模式

觀察者模式是一種物件間的一對多依賴關係,當乙個物件的狀態發生變化時,所有依賴他的物件都將得到通知。通常運用在物件之間的訊息通訊中。比如現在有一群學生,可以組成小組,可以尋求幫助 class students askforhelp subject 向大家尋求幫助 this.tasks.foreach ...

觀察者模式與發布訂閱模式對比

直接上 很簡單的兩個例子 subscribe publish 發布訂閱模式 有乙個中間的事件通訊通道,訂閱者a和發布者b是通過pubsub這個物件關聯起來的,他們沒有直接的交流。console.log pubsub var pubsub function subscrbe topic,fn topi...