觀察者模式 上班玩遊戲,老總是怎麼知道的

2021-04-21 19:03:22 字數 2985 閱讀 2307

注:以下反出現「同學」的地方都使用「c」代替,我自己使用「m」代替,老總「a」。

前些天乙個同學告訴我:「我上班的時候玩遊戲,怎麼老總知道.難不成他在辦公室裡裝有監視器.」

「呵呵,這個很難說,不過應該是不會的.」m說:。

t:「那老總是怎麼知道我玩遊戲的呢?」

m:「這個問題還得好好研究下,或許他還可能真的是在辦公室的某處裝有攝像頭監視呢,哈哈!」

t:「是啊,我也這樣懷疑過,因為辦公室裡出了我,別的同事玩遊戲他也知道。神了這!」

m:「那他不是乙個人可以監視你門多個呀?也,他還玩得高階呢,還弄個一對多的關係出來了。而你辦公室裡的任何乙個人玩遊戲他都能準確準時的逮住你們,你們老總夠強大的哈!」 

m:「這讓我想起了軟體設計的知識。」

觀察者定義了物件間一對多的關係,當乙個物件的狀態變化時,所有依賴它的物件都得到通知並且自動地更新。

t:「你是不是做軟體做瘋了,這也能和軟體設計拉上關係?別蝦扯了,說正事吧。」

m:「我說的就是正事呀,哎,你娃還是老脾氣不改,別人話都沒說完你就打斷別人自己來插上幾句,還是講點原則撒,讓別人說完了你在接到來。你先聽到,我說完了你在說。」

m:「你仔細看看我上面提到的軟體設計知識點,你們老總可以監視你們多個人,當你們玩遊戲他就可以準確準時的逮到你們,用程式來說就是當你們一玩遊戲的時候就呼叫了playgame()方法嗎?而當playgame()方法是被監視起的,當playgame()被呼叫的時候就會自動的通知監視者(你們老總),這樣很明顯,他就知道你們在拿他的錢吃飯不給他做事,反而在辦公室裡玩遊戲了,逮到你你就該著了。不過你也要調過頭想想,老總這樣做也是有原因的,畢竟他投資了資本出來是想得到回報的,是吧?」

t:「打住,打住。你呀,還不是老脾氣不改,還好意思說我。你看你,一說到軟體設計,你就巴不得一口氣把你掌握的東西唱完!」

m:「呵呵,彼此彼此!」

----物件導向設計模式[觀察者模式]

t:「說實話,我不做程式好多天,可我還是難忘曾經的那寫天!聽到你說麵這樣說,我到是對這個軟體設計方案有點興趣了,你能不能說詳細點來聽聽?」

m:「行啊,難得你有這份興趣,我就用個示例來給你簡單的介紹下吧!」

t:「話說多個朋友多條路,呵呵,多個同學還多個聊天吹牛的,噓--小點聲,別讓那傢伙聽到了。」 

m:「其實無論你是在使用.net還是java開發,這兩個平台的事件模型就是乙個典型的觀察者模式的體現。我就以.net平台的c#語言來做個簡單示例介紹。」

m:「首先,我們需要定義乙個委託,通過委託將兩個類的互動進行了繫結,當員工玩遊戲的方法palygame()呼叫後,觸發委託型別的playgame事件,而該事件將被委託給老總(admin)的呼叫老總(notify)方法處理。」

/// 

/// 定義委託

/// 

public

delegate

void delegatemonitoremployee(object sender, customeevetnargs e);

m:「你是乙個人,用物件導向的思想來說的話,那麼你就是乙個物件吧?抽象的人類物件,在公司裡,你作為一名員工,那我們就計算機語言來抽象出員工這個物件employee,你要玩遊戲,而且在玩遊戲的時候還會被老總給逮住,那你得去做乙個playgame方法吧,這裡我們很顯然需要定義乙個委託型別的事件,把遊戲的方法games()通過事件關聯起來。」

//員工類

public

class employee

set 

}private

int _age;

public

int age

set 

}/// 

/// 委託型別的事件

/// 

public

event delegatemonitoremployee playgame;

public

void gages()}}

t:「你上面customeevetnargs這是什麼玩意,以前我做程式的時候好象沒看到過這個東東,是不是自己定義的?」

m:「不錯的嗎?會發現問題了?不錯,customeevetnargs是自己定義的乙個類,他繼承於系統eventargs類,用來傳遞訊息的,等會你就知道了,你玩遊戲就是通過它把你的的名字等資訊傳遞到老總那去的。既然你這麼急著知道他是幹什麼的,那看看下面的定義。」

/// 

/// 事件引數基類eventargs專門用於傳遞事件資料

/// 定義了兩個成員,通過它可以傳遞兩個資料(name,age)

/// 

public

class customeevetnargs:eventargs

set 

}int age = 0;

public

int age

set 

}public customeevetnargs()

}m:「下面我們來看看老總(admin)類裡是怎麼處理的,當員工(employee)玩遊戲(呼叫了playgame)的時候老總是怎麼得到通知的。」

//老總類

public

class admin

}m:「到這裡,整個監視過程我們就完全建立好了。現在是該做實驗的時候到了。老同學(employee),你在去玩遊戲試試,看看老總(admin)是不是可以通過我們上面花這麼多的功夫去建立的這個觀察(監視)你的系統呢?」

t:「你說得比唱得還好聽,就這麼幾十句**,有你說的那麼神嗎?不就不信,好,我去試試。」

--張三(呵呵,前面忘了說,我那同學叫張三,今年22歲了。)開啟了電腦,遊戲啟動。

class program

}--這時,老總辦公室裡的警報聲響了,發出了訊號;

--小張剛剛啟動遊戲,突然辦公室門開了。進來了乙個「人(admin)」。

a:「張三,你膽子夠大的嘛,昨天玩遊戲還罰款你100個大洋,你今天還趕玩?等會到我辦公室去我們聊一會!」

--哈哈,估計這次我這為同學要被洗白。。。。期待被抄中ing.......

原帖及討論:http:

//bbs.bccn.net/thread-213640-1-1.html

上班玩遊戲,老總是怎麼知道的呢

0點過了。可還沒睡意,可能是平時都是2點過才睡覺習慣了吧。不知道幹什麼,好無聊。因為生病了,不想看書 這無聊之時,來記錄乙個故事吧,這可是乙個真實的故事 傻瓜才信,不信的更傻 不看完這文章是你的損失 注 以下反出現 同學 的地方都使用 c 代替,我自己使用 m 代替,老總 a 前些天乙個同學告訴我 ...

上班玩遊戲,老總是怎麼知道的呢

0點過了。可還沒睡意,可能是平時都是2點過才睡覺習慣了吧。不知道幹什麼,好無聊。因為生病了,不想看書 這無聊之時,來記錄乙個故事吧,這可是乙個真實的故事 傻瓜才信,不信的更傻 不看完這文章是你的損失 注 以下反出現 同學 的地方都使用 c 代替,我自己使用 m 代替,老總 a 前些天乙個同學告訴我 ...

遊戲程式設計模式之觀察者模式

在物件間定義一種一對多的依賴關係,以便當某物件的狀態改變時,與它存在依賴關係的所有物件都能收到通知並自動進行更新 摘自 遊戲程式設計模式 成就系統 我們不可以將成就判定 寫在上述中的角色類 物理引擎上。這就到了觀察者模式大顯身手的時候了。其實這是可行的,但這種設計方法是糟糕的,會照成 的不可維護 觀...