一段美好的時光 觀察者模式

2021-06-21 09:13:35 字數 2504 閱讀 2761

學到觀察者模式的時候,腦子裡不禁回憶起了高中時光中的這樣一段故事

時間2010年6月xx日  地點:xx中學  人物:小濤,小凡,我

那是乙個風和日麗的下午

,知了在樹梢不停地叫,彷彿是一首

催眠曲。

語文老師也是在講台上不知疲倦的講解著著名詩歌

《蜀道難》「

噫籲嚱!,危呼高哉!

蜀道之難難於上青天。

蠶叢及魚鳧,開國何茫然。。。

」 慵懶的陽光傾灑下來,微風輕撫,不知不覺間

給人帶來了一絲絲倦意。

只見小凡的腦袋如小雞啄公尺般,一點一點。突然他抬起頭,眯著眼好像下了很大決心似的

「我頂不住了,幫我看著老師,我睡會覺!」然後便埋頭呼呼大睡。

另外乙個小夥伴小濤,貌似精力很旺盛,正在左顧右盼,不知道尋找著什麼。突然從前方伸出乙隻手,遞給了他一本書,看其封面赫然寫著《最**》。驚喜的他面目一轉,衝我嘿嘿一笑便興致勃勃的看了起來。

從他的眼神中我看到了「幫我看著老師,我看會雜誌。」

時間滴答滴答的不停走過。。。

敏銳的我突然發現 教師後門處驚現一龐大人影。機智的我迅速撞了撞小凡和小濤。不過還是晚了一步,班主任氣勢衝衝的走到了小凡跟前:「坐累了吧,站起來歇會!」然後轉身就走了。小濤在旁邊幸災樂禍的說:「太幸運了,竟然沒發現我,哈哈哈~」  

語文老師還在繼續「

蜀道之難難於上青天。。」

只聽小凡嘟囔了句「蜀道難,睡覺更難!」

真是懷念那段美好的時光~

好了廢話不說了,來說說這個觀察模式吧。

觀察者模式:【定義物件間的一種

一對多的依賴關係,當乙個物件的狀態發生改變時,所有依賴於它的物件都得得到通知並被自動更新。】

此模式的參與者分為兩大類,一類是被觀察的目標(主題),另一類是觀察該目標的觀察者們。正因為該模式是基於「一對多」的關係,所以它一般應用於由乙個目標物件和

n個觀察者物件組成的場合。當目標物件的狀態發生改變或做出某種行為時,正在觀察該目標物件的觀察者們將自動、連鎖地作出相應的響應。

拿上面的那個故事來分析,我和班主任充當的是concretesubject 角色,小凡和小濤充當的是concreteobserver 角色。

**例項:

//通知者介面

inte***ce subject

}// 具體通知者 同學

class classmate : subject

//減少

public void detach(observer observer)

//通知

public void notify()

//同學狀態

public string subjectstate

set }}

// 可怕的通知者 班主任

class headteacher : subject

//減少

public void detach(observer observer)

//通知

public void notify()

//班主任狀態

public string subjectstate

set }}

//抽象觀察者

abstract class observer

public abstract void update();

}//具體觀察者, 睡覺的同學

class sleepstudent : observer

public override void update()

「坐累了吧,站起來歇會!」", sub.subjectstate, name);}}

//看雜誌的同學

class magazineobserver : observer

public override void update()

沒收雜誌,好好聽課!", sub.subjectstate, name);}}

客戶端**:

static void main(string args)

效果:

額,在班主任不按套路出牌的時候,我的作用彷彿也不是很大。。

小結:

觀察者模式還可以用我們常用的「部落格訂閱」來解釋。某某同學的部落格被其他很多同學所訂閱,每當他更新部落格的時候,所有訂閱他部落格的同學都可以得到通知。(某某同學即為主題subject,訂閱他部落格的同學為觀察者observer) 然而某某同學更新部落格發通知的時候,並不知道誰訂閱了他的部落格,訂閱某某部落格的同學也不知道其他的訂閱者。 這兩個「不知道」正是體現了依賴倒轉原則。

總之觀察模式所做的工作就是在解除耦合,讓耦合的雙方都依賴於抽象,而不是具體。

C C 擼一段流行的觀察者模式

最近把智慧型指標這塊東西撿起,隨便就擼了個觀察者,主要目的還是練習下幾個智慧型指標,unique ptr,shared ptr,weak ptr等。2017年11月6日 21 25 38 include include using namespace std class base virtual b...

設計模式 一 觀察者模式

首先,給出觀察者模式的定義 觀察者模式定義了一種一對多的依賴關係,讓多個觀察者物件同時監聽某乙個主題物件。這個主題物件在狀態發生變化時,會通知所有觀察者物件,使它們能夠自動更新自己。在這種模式中,有兩個比較關鍵的術語 觀察者 和 主題 或者叫抽象通知者 如何理解?在這裡,我舉乙個例子。每每學到這種設...

觀察者模式的應用

在層與層之間如果存在著直接的相互依賴的關係,那麼可以利用觀察者模式將直接的依賴關係轉化成間接的依賴關係,並且用這種模式降低層與層之間的偶合度.class fg o sgobserver 註冊為作業系統的接收者的物件通過該介面來接收系統訊息 virtual void o essage fg messa...