設計模式C 實現 觀察者模式

2021-07-09 03:22:34 字數 1699 閱讀 9872

觀察者模式:定義物件間的一種一對多的依賴關係,當乙個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新。它還有兩個別名,依賴(dependents),發布-訂閱(publish-subsrcibe)。可以舉個部落格訂閱的例子,當博主發表新文章的時候,即博主狀態發生了改變,那些訂閱的讀者就會收到通知,然後進行相應的動作,比如去看文章,或者收藏起來。博主與讀者之間存在種一對多的依賴關係。下面給出相應的uml圖設計。

可以看到部落格類中有乙個觀察者鍊錶(即訂閱者),當部落格的狀態發生變化時,通過notify成員函式通知所有的觀察者,告訴他們部落格的狀態更新了。而觀察者通過update成員函式獲取部落格的狀態資訊。**實現不難,下面給出c++的一種實現。

[cpp]view plain

copy

print?

//觀察者

class

observer    

virtual

~observer() {}  

virtual

void

update() {}   

};  

//部落格

class

blog    

virtual

~blog() {}  

void

attach(observer *observer)      

//新增觀察者

void

remove(observer *observer)         

//移除觀察者

void

notify() 

//通知觀察者

virtual

void

setstatus(string s)  

//設定狀態

virtual

string getstatus()     

//獲得狀態

private

:  listm_observers; //觀察者鍊錶

protected

:  string m_status; //狀態

};  

以上是觀察者和部落格的基類,定義了通用介面。部落格類主要完成觀察者的新增、移除、通知操作,設定和獲得狀態僅僅是乙個預設實現。下面給出它們相應的子類實現。     

[cpp]view plain

copy

print?

//具體部落格類

class

blogcsdn : 

public

blog  

~blogcsdn() {}  

void

setstatus(string s)  

//具體設定狀態資訊

string getstatus()   

};  

//具體觀察者

class

observerblog : 

public

observer     

~observerblog() {}  

void

update()  

//獲得更新狀態

};  

客戶的使用方式:

[cpp]view plain

copy

print?

//測試案例

intmain()    

設計模式 觀察者模式 C 實現

觀察者模式是軟體設計模式的一種。在此種模式中,乙個目標物件管理所有相依於它的觀察者物件,並且在它本身的狀態改變時主動發出通知。這通常透過呼叫各觀察者所提供的方法來實現。此種模式通常被用來實時事件處理系統。1.模式定義 觀察者模式 observer pattern 定義物件間的一種一對多依賴關係,使得...

C 實現設計模式 觀察者模式

關於觀察者模式,對它的認知依舊是起源於菜鳥教程的設計模式篇章,裡面解釋的很到位。這裡簡單介紹一句,當物件間存在一對多關係時,則使用觀察者模式 observer pattern 比如,當乙個物件被修改時,則會自動通知它的依賴物件。觀察者模式屬於行為型模式。詳細介紹戳該鏈結 菜鳥教程 觀察者模式 本文分...

設計模式 觀察者 C 實現

觀察者設計模式 定義物件之間的一種 一對多 的依賴關係,當乙個物件狀態發生改變的時候,所有依賴這個物件的觀察者都會得到通知並且被自動更新。這種模式也稱為 發布 訂閱 模式。目標就是發布者,他不知道訂閱者是誰,這個物件可以有任意多個訂閱者可以接受發布者傳送的訊息。通過抽象介面就把目標和觀察者進行了解耦...