觀察者模式,專案中用的很多,因為它的邏輯比較清晰,實現方法比較統一,所以也挺好理解的!
觀察者模式:定義物件間的一種一對多的依賴關係,當乙個物件的狀態發生改變時, 所有依賴於它的物件都得到通知並被自動更新。這句話中物件間就是某個被觀察的東西subject和觀察者observer,乙個subject可以有乙個或多個observer(下圖只畫了乙個);狀態改變,也就是subject的狀態改變時(通過client程式呼叫setstate());通知觀察者,subject中有儲存所有觀察者的容器,通過notify()函式遍歷容器中所有的觀察者;怎麼通知?每乙個觀察者自己都有乙個update()函式,它要想獲得subject的更新後的狀態,需要有乙個subject*型別的引數,也就是subject在呼叫notify()時,把自己作為引數傳遞給observer的update(),這樣,在observer裡就可以通過這個subject指標獲得它的狀態更新了。
**比較簡單!首先是subject類的實現:
#include"observer.h"
#include#includeusing namespace std;
class observer;
class subject ;
observer類的實現:#include "subject.h"
void subject::attach(observer * lpobserver)
void subject::detach(observer *lpobserver)
void subject::notify()
}void subject::setstate(string s)
string subject::getstate()
#include "subject.h"
class subject;
class observer ;
class observera :public observer ;
class observerb :public observer ;
使用者呼叫**:#include"openstate.h"
#include#includeusing namespace std;
void observera::update(subject* sbj)
void observerb::update(subject* sbj)
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之間的對映 最簡單的方法...