觀察者模式中,訊息採用推和拉方式來傳遞的比較

2021-06-06 14:50:55 字數 970 閱讀 7286

觀察者模式,指的是定義一種物件間的一對多的關係,當乙個物件的狀態發生變化的時候,所有依賴於它的物件都將得到通知並更新自己。

現在要說的分歧在這裡:

「推」的方式是指,subject維護乙份觀察者的列表,每當有更新發生,subject會把更新訊息主動推送到各個observer去。

「拉」的方式是指,各個observer維護各自所關心的subject列表,自行決定在合適的時間去subject獲取相應的更新資料。

「推」的好處包括:

1、高效。如果沒有更新發生,不會有任何更新訊息推送的動作,即每次訊息推送都發生在確確實實的更新事件之後,都是有意義的。

2、實時。事件發生後的第一時間即可觸發通知操作。

3、可以由subject確立通知的時間,可以避開一些繁忙時間。

4、可以表達出不同事件發生的先後順序。

「拉」的好處包括:

1、如果觀察者眾多,subject來維護訂閱者的列表,可能困難,或者臃腫,把訂閱關係解脫到observer去完成。

2、observer可以不理會它不關心的變更事件,只需要去獲取自己感興趣的事件即可。

3、observer可以自行決定獲取更新事件的時間。

4、拉的形式可以讓subject更好地控制各個observer每次查詢更新的訪問許可權。

2012-2-27 補充:

事實上「推」和「拉」可以比較的內容太多了,比如:

客戶端通常是不穩定的,服務端是穩定的,如果訊息由客戶端主動發起去獲取,它很容易找到服務端的位址,可以比較容易地做到許可權控制(集中在服務端一處),服務端也可以比較容易地跟蹤客戶端的位置和狀態,反之則不行;

網際網路頁面的訪問就是乙個最好的「拉」的模式的例子;

通常我們希望把壓力分散到各個客戶端上去,服務端只做最核心的事情,只提供內容,不管理分發列表;

還有乙個idea是關於「推」和「拉」結合的形式,例如,服務端只負責通知某一些資料已經準備好,至於是否需要獲取和什麼時候客戶端來獲取這些資料,完全由客戶端自行確定。

觀察者模式中,訊息採用推和拉方式來傳遞的比較

觀察者模式,指的是定義一種物件間的一對多的關係,當乙個物件的狀態發生變化的時候,所有依賴於它的物件都將得到通知並更新自己。現在要說的分歧在這裡 推 的方式是指,subject維護乙份觀察者的列表,每當有更新發生,subject會把更新訊息主動推送到各個observer去。拉 的方式是指,各個obse...

觀察者模式(推模型 拉模型)

觀察者模式 observer pattern 當乙個物件被修改時,會自動通知它的依賴物件 現在我們是新聞社,要向所有新聞訂閱者推送新聞。那麼該如何實現呢?經過思考我們不難發現一家新聞社一般對應的是多個新聞訂閱者。那麼我們先從新聞社開始入手,想一想新聞社要具備哪些基本功能呢?1.新聞,2.有哪些訂閱者...

觀察者模式和訂閱者模式

1 要有個存放訂閱的事件佇列 2 通過on去訂閱事件 3 emit去觸發事件 const fs require fs node的自帶模組 const path require path const resolve file console.log resolve age.txt let evento...