設計模式學習(八) 觀察者模式 1(拉模式)

2021-09-17 19:34:39 字數 870 閱讀 6629

2023年4月10日

觀察者模式: 在物件之間定義了一對多的依賴,這樣一來,當乙個物件改變狀態,依賴它的物件會收到通知並自動更新。(其實就是發布訂閱模式,發布者發布資訊,訂閱者獲取資訊,訂閱了就能收到資訊,沒訂閱就收不到資訊。)

推(push)模式是一種基於客戶器/伺服器機制,由伺服器主動將資訊送到客戶器的技術。在push模式應用中,伺服器把資訊送給客戶器之前,並沒有明顯的客戶請求。push事務由伺服器發起。push模式可以讓資訊主動、快速地尋找使用者/客戶器,資訊的主動性和實時性比較好。但精確性較差,可能推送的資訊並不一定滿足客戶的需求。推送模式不能保證能把資訊送到客戶器,因為推模式採用了廣播機制,如果客戶器正好聯網並且和伺服器在同乙個頻道上,推送模式才是有效的。push模式無法跟蹤狀態,採用了開環控制模式,沒有使用者反饋資訊。在實際應用中,由客戶器向伺服器傳送乙個申請,並把自己的位址(如ip、port)告知伺服器,然後伺服器就源源不斷地把資訊推送到指定位址。在多**資訊廣播中也採用了推模式。另外,如手機*、qq廣播。

拉(pull)模式與推模式相反,是由客戶器主動發起的事務。伺服器把自己所擁有的資訊放在指定位址(如ip、port),客戶器向指定位址傳送請求,把自己需要的資源「拉」回來。不僅可以準確獲取自己需要的資源,還可以及時把客戶端的狀態反饋給伺服器。

1、目前常用的設計方案是:私聊/群聊發生時,使用者手機和伺服器報錯websocket連線;當新訊息出現時,本著「節約頻寬和降低延遲」的態度,會傳送一段固定格式的訊息通知客戶端,然後客戶端通過介面fetch儲存在快取的訊息資料;

2、push模型對伺服器的要求很高,直接傳送訊息也有丟失資料的風險,所以使用pull模型來設計方案;

1、

設計模式(八) 觀察者模式

觀察者模式定義了一種一對多的依賴關係,讓多個觀察者物件同時監聽某乙個主題物件,這個主題物件在狀態發生變化時,會通知所有觀察者物件,使他們能夠自動更新自己。觀察者類 class observer void update private string name subject sub 主題類 class...

推拉模式與觀察者模式

最近做乙個訊息系統,其中涉及到新訊息數的即時更新,當時就想到了觀察者模式,後來聽同事提到推拉模式,感覺推模式原理上應該還是屬於觀察者模式,只不過把server變成了被觀察物件,client被動觀察 其實推拉模式我們經常遇到,如廣播 推 http請求 拉 只是沒有刻意去追求概念。設計時還是應該多考慮到...

學習設計模式 觀察者模式

說明 觀察者模式就是有兩個角色,乙個觀察者 乙個通知者,兩者的關係是多對一。當某個是事件觸發時,通知者通知觀察者去處理相應的事件。為了解耦合,需要將兩個角色都先抽象,然後再定義具體的實現類。缺點 需要所有觀察者處理相應事件名稱一致 需求 學生自習的時候開小差,需要代表時刻觀察老師是否來了,如果來了,...