0點過了。可還沒睡意,可能是平時都是2點過才睡覺習慣了吧。不知道幹什麼,好無聊。因為生病了,不想看書;這無聊之時,來記錄乙個故事吧,這可是乙個真實的故事(傻瓜才信,不信的更傻--不看完這文章是你的損失)。
注:以下反出現「同學」的地方都使用「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
}--這裡,老總辦公室裡的警報聲響了,發出了訊號;
--小張剛剛啟動遊戲,突然辦公室門開了。進來了乙個「人(admin)」。
a:「張三,你膽子夠大的嘛,昨天玩遊戲還罰款你100個大洋,你今天還趕玩?等會到我辦公室去我們聊一會!」
--哈哈,估計這次我這為同學要被洗白。。。。期待被抄中ing.......
上班玩遊戲,老總是怎麼知道的呢
0點過了。可還沒睡意,可能是平時都是2點過才睡覺習慣了吧。不知道幹什麼,好無聊。因為生病了,不想看書 這無聊之時,來記錄乙個故事吧,這可是乙個真實的故事 傻瓜才信,不信的更傻 不看完這文章是你的損失 注 以下反出現 同學 的地方都使用 c 代替,我自己使用 m 代替,老總 a 前些天乙個同學告訴我 ...
觀察者模式 上班玩遊戲,老總是怎麼知道的
注 以下反出現 同學 的地方都使用 c 代替,我自己使用 m 代替,老總 a 前些天乙個同學告訴我 我上班的時候玩遊戲,怎麼老總知道.難不成他在辦公室裡裝有監視器.呵呵,這個很難說,不過應該是不會的.m說 t 那老總是怎麼知道我玩遊戲的呢?m 這個問題還得好好研究下,或許他還可能真的是在辦公室的某處...
愛玩遊戲的Tom
時間限制 c c 1秒,其他語言2秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld 第一行輸入n和m,n代表接下來的行數,m代表可用空間剩餘記憶體,整數之間空格隔開 接下來的n行,由兩個整數組成,前乙個為每個軟體大小,後乙個整數代表重要程度,整數之...