設計模式 Observer實現

2022-03-29 13:56:45 字數 2076 閱讀 3673

observer模式的典型實現:

subject.h note:1.subject類依賴obserer介面類。2.attach又叫register/subscribe/addobserver,detach又叫release/unsubscribe/removeobserver。todo:attach方法應該判斷乙個observer有沒有被重複新增。detach應確保obserer存在。考慮subject物件銷毀如何通知observer。

#ifndef dp_subject_h

#define dp_subject_h#include

"observer.h

"#include

class

subject

virtual

void attach(observer*observer)

virtual

void detach(observer*observer)

virtual

void

notify()

}protected

: subject()

private

: std::list

*observers;

};#endif

observer.h

#ifndef dp_observer_h

#define dp_observer_h

class

subject;

class

observer

virtual

void update(subject* subject) = 0

;protected

: observer()

};#endif

concretesubject.h note:setstate方法裡直接呼叫notify可以減輕使用者負擔。

#ifndef dp_concretesubject_h

#define dp_concretesubject_h#include

"subject.h

"#include

class concretesubject : public

subject

void setstate(const std::string&state)

std::string

getstate()

private

: std::

string

subjectstate;

};#endif

concreteobserver.h note:1.細節通過呼叫getstate向concretesubject查詢,屬於拉模型。2.要是update引數包括全部或部分細節,則是推模型。3.定義乙個collection成員儲存多個subject,不在建構函式裡初始化繫結subject,而是通過動態的方式註冊,可以實現觀察多個subject。 todo:update函式應該對dynamic_cast的異常情況進行處理。

#ifndef dp_concreteobserver_h

#define dp_concreteobserver_h#include

"observer.h

"#include

class concretesubject;

class concreteobserver : public

observer

virtual ~concreteobserver()

virtual

void update(subject*subject)

}private

: subject*subject;

std::

string

observerstate;

};#endif

main.cpp

#include

"concretesubject.h

"#include

"concreteobserver.h

"int

main()

設計模式Observer

observer設計模式的定義 定義了物件之間的一對多的依賴,這樣以來,當乙個物件改變狀態時,它的所有依賴者都會受到通知並自動更新。ifndef subjec h define subjec h include observer.h class subject subject subject sub...

Observer設計模式

observer設計模式是針對 乙個物件對多個物件中,乙個物件發生狀態改變,其他附屬物件發生相應的更新。是一種松耦合的設計模式。例子 假設我們有個高檔的熱水器,我們給它通上電,當水溫超過95度的時候 1 揚聲器會開始發出語音,告訴你水的溫度 2 液晶屏也會改變水溫的顯示,來提示水已經快燒開了。現在我...

設計模式 Observer

定義物件間的一種一對多的依賴關係,當乙個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新。dependents,publish subscribe 適用性 結構 允許你獨立的改變subject和observer。優缺點 1.建立subject到其observer之間的對映 最簡單的方法...