1.意圖
定義物件間的一種一對多的依賴關係,當乙個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新。
2.別名
依賴(depenents),發布-訂閱(publish-subscribe)
3.動機
乙個目標可以有任意數目的依賴它的觀察者。一旦目標的狀態發生改變,所有的觀察者都得到通知。作為這個通知的響應,每個觀察者都將查詢目標以使其狀態於目標的同步。
4.適用性
5.結構
6.**例項
//subject.h
#include
#include
class
abstractobserver;
class
abstractsubject
;class concretesubject : public
abstractsubject
;
//observer.h
#include
class
abstractsubject;
class
abstractobserver
;class concreteobserver1 : public
abstractobserver
;class concreteobserver2: public
abstractobserver
;class concreteobserver3 : public
abstractobserver
;
//subject.cpp
#include
"subject.h
"#include
"observer.h
"concretesubject::concretesubject()
concretesubject::~concretesubject()
void concretesubject::setstate(int
state)
void concretesubject::attach(std::shared_ptrpobserver)
intconcretesubject::getstate()
void
concretesubject::notify()
}
//observer.cpp
#include
"observer.h
"#include
"subject.h
"#include
concreteobserver1::concreteobserver1(std::shared_ptr
psubject)
: m_subject(psubject)
concreteobserver1::~concreteobserver1()
void
concreteobserver1::update()
concreteobserver2::concreteobserver2(std::shared_ptr
psubject)
: m_subject(psubject)
concreteobserver2::~concreteobserver2()
void
concreteobserver2::update()
concreteobserver3::concreteobserver3(std::shared_ptr
psubject)
: m_subject(psubject)
concreteobserver3::~concreteobserver3()
void
concreteobserver3::update()
//7.測試結果client.cpp
#include
"observer.h
"#include
"subject.h
"int
main()
8.效果
Observer 觀察者 行為模式
observer 觀察者 行為模式,定義物件的一對多的依賴關係,當乙個物件的狀態發生改變時,所有依賴於該物件的物件都會得到通知並被自動更新。observe模式也很好理解,恩,像flash中的事件偵聽,像rss,向報紙的訂閱。我拿puremvc來舉例吧,puremvc是跨語言的,現在已經支援很多種語言...
行為型 觀察者模式(Observer)
觀察者模式 observer pattern 定義物件之間的一種一對多依賴關係,使得每當乙個物件狀態發生改變時,其相關依賴物件皆得到通知並被自動更新。觀察者模式的別名包括發布 訂閱 publish subscribe 模式 模型 檢視 model view 模式 源 source listener ...
行為型模式之觀察者OBSERVER
當乙個物件的狀態發生改變時,所以依賴它的物件都會得到通知並被自動更新。在excel中,當資料變化時,與資料對應的 和圖形都會隨之變化。這就需要資料在變化時自行通知其的依賴類,隨之改變。如圖subject物件維持乙個依賴它的觀察物件表,當subject內容發生變化,需要通知觀察者時就會呼叫觀察者物件的...