觀察者模式通常的叫法叫做訂閱-發布模式,類似於報刊雜誌的訂閱,觀察者和被觀察者就是讀者和郵局的關係,讀者先要在郵局訂閱想要的報刊,當報刊發行時,郵局會將報刊郵寄到讀者家裡。觀察者(observer)和被觀察者(listener)也是這種關係,observer將自己attach到listener中,當listener觸發時notify所有observer.
作用在觀察者模式中,被觀察者維護觀察者物件的集合,當被觀察者物件變化時,它會通知觀察者。觀察者模式主要是用於解決物件之間一對多的關係。
類檢視實現
class observer
; virtual void update(const std::string &msg)= 0;
protected:
observer(){};
};class listener
; void attach(observer* obsvr)
void remove(observer* obsvr)
void notify(const std::string &msg)
private:
list m_observers; //觀察者鍊錶
};class logrunner : public listener
; void addmsg(const std::string &msg) }
class loggui : public observer
; void update(const std::string &msg)
observer中update一般為純虛,通過子類各自實現,這裡只是保證呼叫的介面一致,listener中的attach、remove、notify一般建議不進行虛化,子類不用關心其內部的聚合內容,通過呼叫notify實現訊息分發即可。當然也可以虛化,將這一系列的操作放到子類進行實現。
呼叫者應該注意在多執行緒環境中的使用環境,做好資料的同步工作。
應用場景
本文標題: c++設計模式之觀察者模式(observer)
本文位址: /ruanjian/c/224539.html
c 設計模式之觀察者模式
觀察者模式 observer 定義 觀察者模式定義了一種一對多的依賴關係,讓多個觀察者物件同時監聽某乙個主題物件。這個主題物件在狀態上發生變化時,會通知所有觀察者物件,讓它們能夠自動更新自己。觀察者模式類結構圖 觀察者模式的角色 subject抽象主題角色 把所有對觀察者物件的引用儲存在乙個集合中,...
c 設計模式之觀察者模式
觀察者模式定義了物件間的一對多依賴關係,當乙個物件的狀態發生改變時,所有依賴於它的物件都會得到通知並自動更新.觀察者與被觀察者之間使用松耦合方式結合 主題是真正擁有資料的人,觀察者是主題的依賴者,在資料變化時更新,比許多物件控制同乙份資料更乾淨 class observer 觀察者介面 class ...
C 設計模式之觀察者模式
觀察者設計模式定義了物件間的一對多的依賴關係,乙個物件的行為依賴於另乙個物件的狀態的情況下,當物件狀態發生變化時,依賴它的物件會得到通知並自動重新整理。觀察者模式中主要有兩種角色 觀察者和監聽者 觀察者主要是在事件到來時,通知對於該事件感興趣的監聽者來處理事件。所以它的職責也就顯而易見了 通知觀察者...