實現方式:觀察者模式有很多實現方式,從根本上說,該模式必須包含兩個角色:觀察者和被觀察物件。實現觀察者模式有很多形式,比較直觀的一種是使用一種「註冊——通知——撤銷註冊」的形式。
角色:
使用場景:適合用於訂閱發布這種場景,每次當被訂閱者發布新的內容時就通知訂閱者更新。
**:
//filename observer.h
#include #include #include using namespace std;
/抽象模式定義
class cobservable;
//觀察者,純虛基類
class cobserver
; virtual ~cobserver(){};
//當被觀察的目標發生變化時,通知呼叫該方法
//來自被觀察者pobs, 擴充套件引數為parg
virtual void update(cobservable* pobs, void* parg = null) = 0;
};//被觀察者,即subject
class cobservable
; virtual ~cobservable() {};
void attach(cobserver* pobs); //註冊觀察者
void detach(cobserver* pobs); //登出觀察者
void detachall(); //登出所有觀察者
void notify(void* parg = null); //若狀態變化,則遍歷觀察者,逐個通知更新
bool haschanged(); //測試目標狀態是否變化
int getobserverscount(); //獲取觀察者數量
protected:
void setchanged(); //設定狀態變化!!!必須繼承cobservable才能設定目標狀態
void clearchanged(); //初始化目標為未變化狀態
private:
bool m_bchanged; //狀態
setm_setobs; //set保證目標唯一性
};/抽象模式實現
void cobservable::attach(cobserver* pobs)
void cobservable::detach(cobserver* pobs)
void cobservable::detachall()
void cobservable::setchanged()
void cobservable::clearchanged()
bool cobservable::haschanged()
int cobservable::getobserverscount()
void cobservable::notify(void* parg /* = null */)
}/具體應用類定義和實現
//bloger是發布者,即被觀察者(subject)
class cbloger : public cobservable
};//portal是發布者,即被觀察者(subject)
class cportal : public cobservable
};//rss閱讀器,觀察者
class crssreader : public cobserver
virtual void update(cobservable* pobs, void* parg = null)else if (dynamic_cast(pobs))
}private:
string m_strname;
};//mail閱讀器,觀察者
class cmailreader : public cobserver
virtual void update(cobservable* pobs, void* parg = null)
if (dynamic_cast(pobs))
}private:
string m_strname;
};#include "observer.h"
int main()
python 設計模式 觀察者 觀察者設計模式
在觀察者設計模式這種模式中,物件被表示為等待事件觸發的觀察者。一旦發生指定的事件,觀察者就會關注該主體。當事件發生時,主體告訴觀察者它已經發生。以下uml圖表示觀察者模式 如何實現觀察者模式?現在讓我們來看看如何實現觀察者模式。參考以下實現 import threading import time ...
C 設計模式 觀察者模式
觀察者模式 也可以稱為通知者模式,訂閱 發布模式 模型 檢視模式 大致概念 乙個主題 theme 多個觀察者 observer 收聽它。就好比 春節聯歡晚會 theme 全國觀眾 observer 現場直播。那麼我們怎樣看直播呢?沒有電視你看的成嗎?有電視,但是沒有全國直播,你看的成嗎?好了,這樣說...
C 設計模式 觀察者模式
二.實現 比如熱水器在燒水的過程中,當水溫即將燒開時,會發出報警的聲音,顯示器上會出現溫度監控 public inte ce iobserver iobserverable介面 public inte ce iobservable 抽象基類 public abstract class subject...