兩個模式的實現結構:
觀察者模式:觀察者(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...