Observer模式Linux下的C 實現

2021-06-04 06:15:41 字數 2281 閱讀 3609

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...