設計模式學習(十一) 觀察者模式

2021-09-11 21:46:10 字數 1584 閱讀 9206

這是個人學習程式設計模式的系列學習筆記第十一篇。

採用qt creator進行編寫,但盡量採用c++基礎語法。

觀察者模式(observer pattern):定義物件間的一種一對多的依賴關係 ,當乙個物件的狀態發生改變時 , 所有依賴於它的物件

都得到通知並被自動更新。觀察者模式又叫:依賴(dependents)或發布-訂閱模式(publish-subscribe)。

個人覺得發布-訂閱模式最容易理解這個模式的含義。

乙個物件作為發布者,多個物件作為訂閱者,在發布者有狀態變化的時候,會通知到全部的訂閱者。最容易理解的是,乙個人寫了部落格,有多個訂閱者,如果部落格更新,會通知全部的訂閱者。

觀察者模式主要用於:有兩類物件關係密切,但有不希望兩類物件緊耦合,通過抽象物件之間的介面實現發布物件狀態的變化能通知到全部訂閱物件。

觀察者模式可以採用推模式和拉模式進行通知廣播。推模式提供給觀察者全部所需的資訊,拉模式提供給觀察者最小需要的資訊,由訂閱者向發布者詢問更多需要的細節。

後期發展的委託技術是觀察者模式的進一步公升級。能實現對不同介面的通知(介面的引數需要相同)。

假設要設計乙個對外置收指令的介面,各種指令對應不同的類來處理,可能是多個,也可能是1個。接收到這個指令的類根據自己的情況作出對應的指令響應。

這有點像乙個url分發器,將前台接收到的請求傳送給後面的多個業務處理器,業務處理器根據url內容決定如何響應。

定義乙個發布介面類,包含訂閱者附加、去除,訂閱通知介面,派生具體的發布者類,接收指令並完成通知介面的呼叫。

定義乙個訂閱介面類,包括通知訊息處理介面。派生多個具體的訂閱者對指令進行各自的處理。

採用觀察者模式的推模式(在進行通知廣播的時候,將觀察者需要的全部資訊都提供給觀察者,本示例需要的就是乙個命令字串,採用推模式感覺更解耦)。

學習設計模式 觀察者模式

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

設計模式學習 觀察者模式

定義 定義物件間一種一對多的依賴關係,使得每當乙個物件發生變化時,則所有依賴於他的物件都會得到通知並自動更新。使用場景 特點 實現物件的解耦,將觀察者和被觀察者完全隔離,只依賴於observe和observable抽象。簡單實現例子 抽象觀察者類,為所有具體觀察者定義乙個介面,在得到通知時更新自己 ...

設計模式學習 觀察者模式

觀察者模式就是某種事件發生之後,被觀察者收到訊號,通知註冊的觀察者進行邏輯處理,一般遊戲開發中任務和成就多是類似實現。簡單示例 pragma once include using namespace std const int max observer num 100 enum class even...