觀察者模式

2022-08-27 06:42:10 字數 1200 閱讀 4275

觀察者模式又叫發布訂閱模式(publish/subscribe),它定義了一種一對多的關係,讓多個觀察者物件同時監聽某乙個主題物件,這個主題物件的狀態發生變化時就會通知所有的觀察者物件,使得它們能夠自動更新自己。

使用觀察者模式的好處:

支援簡單的廣播通訊,自動通知所有已經訂閱過的物件。

頁面載入後目標物件很容易與觀察者存在一種動態關聯,增加了靈活性。

目標物件與觀察者之間的抽象耦合關係能夠單獨擴充套件以及重用。

首先要把觀察者物件建立處理,他有乙個訊息容器,三個方法,分別是訂閱、退訂、發布

//

將觀察者放在閉包中,頁面載入時立即執行

var observer = (function

();

return

;

//發布資訊介面

fire:function

(){};

//移除資訊介面

remove:function

(){};

}})();

首先我們需要實現訊息註冊的方法,註冊方法的作用是將訂閱者註冊的訊息推入訊息佇列中,接受兩個引數:訊息型別以及相應的處理動作,推入到訊息佇列時如果訊息不存在就要建立乙個訊息型別並將它放入訊息佇列中,如果訊息存在則推入佇列中。

register : function

()else

}

發布訊息方法是觀察者將所有訂閱者訂閱的訊息一次性執行,接受兩個引數,訊息型別和動作執行時需要的引數,執行訊息動作佇列之前檢驗訊息的存在,如果沒有註冊則返回。然後遍歷訊息執行方法佇列,並依次執行。然後將訊息類別和傳遞的引數打包依次傳入訊息執行方法中。

fire : function

(type, args) //

訊息攜帶資料

}, i = 0,//

訊息動作迴圈變數

len = messages[type].length;//

訊息動作長度

//遍歷訊息動作

for(;i)

}

最後是訊息登出方法,其功能是將訂閱者登出的訊息從訊息佇列中刪除,需要兩個引數,即訊息型別以及執行的某一動作,為避免刪除訊息動作時訊息不存在的情況,對訊息佇列中的訊息要進行檢驗

remove : function

(type, fn)

}}

python觀察者模式 python 觀察者模式

python 觀察者模式 前言e 寫的倉促就不截uml類圖了,書本chapter10,p313能看到圖 一旦觀察的主題有更新,就會通知到觀察者們,下面的例子是最簡單的乙個觀察者範例,假設這是一群投機分子密切關注 軍 火 倉庫的產品與數量變動 class inventory def init self...

觀察者模式

觀察者模式 observer 完美的將觀察者和被觀察的物件分離開。舉個例子,使用者介面可以作為乙個觀察者,業務資料是被觀察者,使用者介面觀察業務資料的變化,發現資料變化後,就顯示在介面上。物件導向設計的乙個原則是 系統中的每個類將重點放在某乙個功能上,而不是其他方面。乙個物件只做一件事情,並且將他做...

觀察者模式

觀察者模式定義了一種一對多的依賴關係,讓多個觀察者物件同時監聽某乙個主題物件。這個主題物件在狀態上發生變化時,會通知所有觀察者物件,讓他們能夠自動更新自己 任何乙個模式都是離不開角色的,這裡也會有幾種角色 抽象主題角色 把所有對觀察者物件的引用儲存在乙個集合中,每個抽象主題角色都可以有任意數量的觀察...