主要思想:建立乙個一對多的關係,當乙個物件發生發生變化時,其他物件也發生變化。
可以舉個部落格訂閱的例子,當博主發表新文章的時候,即博主狀態發生了改 變,那些訂閱的讀者就會收到通知,然後進行相應的動作,比如去看文章,或者收藏起來。博主與讀者之間存在種一對多的依賴關係。下面給出相應的uml圖設 計。
#include #include#include
using
namespace
std;
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 std::string
getstatus()
private
: list
m_observers;
protected
: std::
string
m_status;
};class blogbky : public
blog
~blogbky() {}
void setstatus(string
s)
string
getstatus()
private
:
string
m_name;
};class observerblog : public
observer
~observerblog() {}
void
update()
private
: std::
string
m_name;
blog *m_blog;
};
#include "observer.h
"int
main()
{ blog *blog = new blogbky("mcy
");//例項化的目標,被關注的物件,他的動態要通知觀察者。
observer *observer1 = new observerblog("
hello
",blog);//粉絲建立例項,關注觀察者。
blog->attach(observer1);//博士掛載自己的觀察者
blog->setstatus("
發表部落格!
");//博主動態改變
blog->notify();//博主通知觀察者
system(
"pause");
//delete blog;
//delete observer1;
return
0;
四個必須:
subject(目標)
——目標知道它的觀察者。可以有任意多個觀察者觀察同乙個目標;
——提供註冊和刪除觀察者物件的介面。
observer(觀察者)
——為那些在目標發生改變時需獲得通知的物件定義乙個更新介面。
concretesubject(具體目標)
——將有關狀態存入各concreteobserver物件;
——當它的狀態發生改變時,向它的各個觀察者發出通知。
concreteobserver(具體觀察者)
——維護乙個指向concretesubject物件的引用;
——儲存有關狀態,這些狀態應與目標的狀態保持一致;
——實現observer的更新介面以使自身狀態與目標的狀態保持一致。
python 設計模式 觀察者 觀察者設計模式
在觀察者設計模式這種模式中,物件被表示為等待事件觸發的觀察者。一旦發生指定的事件,觀察者就會關注該主體。當事件發生時,主體告訴觀察者它已經發生。以下uml圖表示觀察者模式 如何實現觀察者模式?現在讓我們來看看如何實現觀察者模式。參考以下實現 import threading import time ...
C 設計模式 觀察者模式
觀察者模式 也可以稱為通知者模式,訂閱 發布模式 模型 檢視模式 大致概念 乙個主題 theme 多個觀察者 observer 收聽它。就好比 春節聯歡晚會 theme 全國觀眾 observer 現場直播。那麼我們怎樣看直播呢?沒有電視你看的成嗎?有電視,但是沒有全國直播,你看的成嗎?好了,這樣說...
C 設計模式 觀察者模式
二.實現 比如熱水器在燒水的過程中,當水溫即將燒開時,會發出報警的聲音,顯示器上會出現溫度監控 public inte ce iobserver iobserverable介面 public inte ce iobservable 抽象基類 public abstract class subject...