observer模式定義物件間的一對多的依賴關係,當乙個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新。
observer模式定義的是一種一對多的關係,一是subject類,而多則是obesrver類,當subject類的狀態發生變化的時候通知與之對應的obesrver類們也去相應的更新狀態,同時支援動態的新增和刪除observer物件的功能。
subject類一般都是採用鍊錶等容器來存放observer物件指標;
observer類一般是抽取observer物件的一些公共的屬性形成observer基類,而subject中儲存的則是observer類物件的指標,這樣就使subject和具體的observer實現了解耦;
下面是測試**:
#ifndef observer_h
#define observer_h
#include #include using namespace std;
typedef int status;
#define safe_delete(p) }
#define safe_delete_array(p) }
class mutex
~mutex()
void lock()
void unlock()
private:
pthread_mutex_t m_lock;
};class iobserver;
class isubject
virtual ~isubject();
void register(iobserver *pobserver);
void unregister(iobserver *pobserver);
virtual void setstatus(status status) = 0;
virtual status getstatus() = 0;
virtual void notify() = 0;
protected:
status m_statussubject;
mutex m_mutex;
listm_listobserver;
};class subject : public isubject
virtual ~subject() {};
virtual void setstatus(status status);
virtual status getstatus();
virtual void notify();
};class iobserver
virtual ~iobserver() {}
virtual void update(isubject* psubject) = 0;
protected:
status m_statusobserver;
};class observer : public iobserver
virtual ~observer() {}
virtual void update(isubject* psubject);
};#endif
#include "observer.h"
#include #include isubject::~isubject()
void isubject::register(iobserver *pobserver)
void isubject::unregister(iobserver *pobserver)
m_mutex.unlock();
printf("- unregister one observer. \n");
}void subject::notify()
m_mutex.unlock();
printf("<<< notify all observers. \n");
}void subject::setstatus(status status)
status subject::getstatus()
void observer::update(isubject *psubject)
m_statusobserver = psubject->getstatus();
}
int main()
設計模式 Observer模式
目錄 具體實現總結 觀察者模式 發布 訂閱模式 是一種行為型模式,定義一系列物件之間的一對多關係,當乙個物件改變 更新狀態時,依賴它的都會收到通知改變或者更新。在此種模式中,乙個目標物件管理所有相依於它的觀察者物件,並且在它本身的狀態改變時主動發出通知。這通常透過呼叫各觀察者所提供的方法來實現。此種...
設計模式Observer
observer設計模式的定義 定義了物件之間的一對多的依賴,這樣以來,當乙個物件改變狀態時,它的所有依賴者都會受到通知並自動更新。ifndef subjec h define subjec h include observer.h class subject subject subject sub...
Observer模式實踐
observer 模式在實踐中的應用場景 為 point 類設計乙個資料繫結機制,當其座標 x 或 y 被更改時,可以通知外界其更改的過程。將更改過程列印在控制台上。考慮使用松耦合設計。include include using namespace std struct observer struc...