C 設計模式 觀察者模式

2021-09-21 06:43:47 字數 2237 閱讀 9362

實現方式:觀察者模式有很多實現方式,從根本上說,該模式必須包含兩個角色:觀察者和被觀察物件。實現觀察者模式有很多形式,比較直觀的一種是使用一種「註冊——通知——撤銷註冊」的形式。

角色:

使用場景:適合用於訂閱發布這種場景,每次當被訂閱者發布新的內容時就通知訂閱者更新。

**:

//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...