學到觀察者模式的時候,腦子裡不禁回憶起了高中時光中的這樣一段故事
時間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...