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