設計模式 觀察者模式

2021-07-24 14:42:14 字數 1713 閱讀 9292

設計模式是人們從長期的軟體開發實戰中總結出來的一些經驗之談,為軟體領域中的開發人員提供了一種使用專家設計經驗的有效途徑,通常是多個設計模式結合使用。設計模式中運用了物件導向程式設計語言的重要特性:封裝、繼承、多型,只有通過大量的程式設計實踐才能真正領悟設計模式的精髓。在參加校招前我翻看了部分設計模式相關的書,對於每個設計模式模式,用c++寫了個小例子,加深一下理解。主要參考《大話設計模式》和《設計模式》兩本書以及借鑑其他博文的優秀部分。本文介紹觀察者模式的實現。希望對大家加深對設計模式的理解有一點幫助。

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

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

//觀察者

class observer

virtual~observer() {}

virtualvoid update() {}};

//部落格

class blog

virtual~blog() {}

voidattach(observer *observer) //新增觀察者

voidremove(observer *observer) //移除觀察者

voidnotify() //通知觀察者

virtualvoid setstatus(string s) //設定狀態

virtualstring getstatus() //獲得狀態

private:

list

m_observers; //觀察者鍊錶

protected:

stringm_status; //狀態

};

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

//具體部落格類

class blogcsdn : public blog

~blogcsdn(){}

voidsetstatus(string s) //具體設定狀態資訊

stringgetstatus() };

//具體觀察者

class observerblog : publicobserver

~observerblog(){}

voidupdate() //獲得更新狀態

好啦,關於觀察者模式就介紹到這裡了,希望你已經掌握了這個模式並且可以熟練的使用它,那麼本博文的效果就達到了。如果你還覺得意猶未盡,那麼可以去看看博主的其他設計模式的介紹哦。

關於設計模式,我推薦大家看看以下部落格寫的博文,關於設計模式的講解將的特別好,我從中學習了很多,我的設計模式中的部分博文就是從這裡借鑑過來的。

python 設計模式 觀察者 觀察者設計模式

在觀察者設計模式這種模式中,物件被表示為等待事件觸發的觀察者。一旦發生指定的事件,觀察者就會關注該主體。當事件發生時,主體告訴觀察者它已經發生。以下uml圖表示觀察者模式 如何實現觀察者模式?現在讓我們來看看如何實現觀察者模式。參考以下實現 import threading import time ...

設計模式 觀察者模式

觀察者模式定義了物件間一對多的依賴關係,乙個物件發生變化時,所有依賴它的物件都得到通知並被自動更新。本文主要闡述觀察者模式在分布式scada人機介面中的使用,利用這種模式使得人機介面顯示效率更高。發布者 郵局 觀察者 參與者 讀者 訂閱者 當郵局收到報社新雜誌的時候,即郵局狀態發生了改變,於是郵局把...

設計模式 觀察者模式

核心思想 註冊 通知 撤銷註冊 observer 將自己註冊到被觀察物件 subject 中,被觀察物件將觀察者存放在乙個容器 container 裡。被觀察物件發生了某種變化 如圖中的somechange 從容器中得到所有註冊過的觀察者,將變化通知觀察者。觀察者告訴被觀察者要撤銷觀察,被觀察者從容...