C 實現觀察者 Observer 模式詳解

2021-07-04 21:06:35 字數 2292 閱讀 4305

觀察者(observer)模式,是常見的模式之一。比如乙份報紙,有很多訂戶。訂閱者並不知道報紙何時會送來,他只知道自己訂了這份報紙。訂閱者在這裡擔任著觀察者的角色,而報社則是被觀察者。

報紙一旦印刷完畢,就應該及時送到訂戶手中,如果將報社看作乙個物件,則報紙便是觀察者(訂戶)和被觀察者(報社)之間的紐帶。觀察者需要維護乙個與報紙相關的變數或函式,在這個具體問題中,這個變數就是訂戶是否收到報紙,可設定為乙個布林型,當收到時,訂戶需要更新這個變數。

下面是原始碼:

// "observer.h"

#ifndef _observer_h_

#define _observer_h_

#include using namespace std;

class observer;

/* 被觀察者介面 */

class subject

void attach(observer *oo);//訂閱此物件

void detach(observer *oo);//解除訂閱

void notify();//通知訂閱者更新

void virtual issue() = 0;//發行函式

bool getissue()

~subject()

m_observerlist.clear();

}protected:

bool m_issue;//發行標誌

listm_observerlist;//訂閱者佇列

};/*觀察者介面*/

class observer

; void virtual update()//更新函式

void virtual showmessage() = 0;//模擬與被觀察者相關的函式

protected:

bool m_receive;//收到報紙標誌

};/* 具體的被觀察者 */

class concretesubject:public subject

void issue();

};/* 具體的觀察者 */

class subscriber1:public observer

;class subscriber2:public observer

;#endif

被觀察者介面說明:

1.訂閱物件、解除訂閱、通知更新的函式,是所有被觀察者共有行為,所以將其抽象出來作為被觀察者的介面。

2.發行函式模擬改變狀態函式,因為不同的被觀察者有不同的方式,所以將其宣告為純虛函式,在派生類中實現。

3.觀察者用std中的list模板來實現,所以需要析構函式來釋放。

觀察者介面說明:

1.由於所有觀察者都有更新狀態這一操作,所以將其宣告為介面。

2.update()函式對於不同的具體物件,有不同的行為,所以在派生類中實現,宣告為純虛函式。

3.showmessage()函式用來模擬與被觀察者相關的操作,如果被觀察者狀態改變,觀察者需要執行某種操作,則在這裡實現。本例中用來顯示收到報紙這一資訊。

下面是類的實現部分:observer.cpp

#include "observer.h"

#include #include /* 訂閱報紙 */

void subject::attach(observer *oo)

/* 取消訂閱 */

void subject::detach(observer *oo)

}/*通知更新*/

void subject::notify()

}/* 更改狀態 */

void concretesubject::issue()

}/*訂閱者更新*/

void subscriber1::update()

void subscriber1::showmessage()

/*訂閱者更新*/

void subscriber2::update()

void subscriber2::showmessage()

下面是主程式部分:

#include "observer.h"

#include int main()

else

sub->issue(); //發行報紙

coutelse

sub->detach(customer1);//觀察者1取消訂閱

sub->issue(); //發行報紙

return 0;

}

C 觀察者模式(Observer)

當有很多個物件依賴於乙個狀態值時,為了在狀態值改變時統一的通知這些物件作出相應的改變,類似廣播通知 include include include include 觀察者抽象類 class cobserver virtual cobserver 狀態更新時的處理方法 virtual void upd...

Observer觀察者模式(C )

subject observers observer pattern 觀察者模式定義 物件之間的一對多依賴關係,當乙個物件改變狀態時,所有依賴於它的物件都會自動獲得通知 觀察者模式應用 主題物件只與觀察者基類有耦合 客戶配置觀察者的數量與型別 observers首先要知道subject,然後把自己註...

C 觀察者模式(Observer)

理解 訂閱 發布。把所有需要通知的物件新增到發布者類裡面。發布者更改自己狀態後通知觀察者 using system.collections.generic using system.windows.forms namespace designmode.observer public class we...