c 設計模式 觀察者模式

2022-08-29 23:21:20 字數 2022 閱讀 8086

主要思想:建立乙個一對多的關係,當乙個物件發生發生變化時,其他物件也發生變化。

可以舉個部落格訂閱的例子,當博主發表新文章的時候,即博主狀態發生了改 變,那些訂閱的讀者就會收到通知,然後進行相應的動作,比如去看文章,或者收藏起來。博主與讀者之間存在種一對多的依賴關係。下面給出相應的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...