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

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

      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)方法處理。”

 

/// <summary>
/// 定義委託
/// </summary>
public delegate void DelegateMonitorEmployee(object sender, CustomeEvetnArgs e);

 

M:“你是一個人,用面向對象的思想來說的話,那麼你就是一個對象吧?抽象的人類對象,在公司裏,你作爲一名員工,那我們就計算機語言來抽象出員工這個對象Employee,你要玩遊戲,而且在玩遊戲的時候還會被老總給逮住,那你得去做一個PlayGame方法吧,這裏我們很顯然需要定義一個委託類型的事件,把遊戲的方法Games()通過事件關聯起來。”

 

//員工類

public class Employee
{
    private string _name;
    public string Name
    {
        get { return _name; }
        set { _name = value; }
    }

    private int _age;
    public int Age
    {
        get { return _age; }
        set { _age = value; }
    }

    /// <summary>
    /// 委託類型的事件
    /// </summary>
    public event DelegateMonitorEmployee PlayGame;

    public void Gages()
    {
        if (PlayGame != null)
        {
            CustomeEvetnArgs e = new CustomeEvetnArgs();
            e.Name = this._name;
            e.Age = this._age;
            PlayGame(this, e);
        }
    }
}

 

T:“你上面CustomeEvetnArgs這是什麼玩意,以前我做程序的時候好象沒看到過這個東東,是不是自己定義的?

M:“不錯的嗎?會發現問題了?不錯,CustomeEvetnArgs是自己定義的一個類,他繼承於系統EventArgs類,用來傳遞消息的,等會你就知道了,你玩遊戲就是通過它把你的的名字等信息傳遞到老總那去的。既然你這麼急着知道他是幹什麼的,那看看下面的定義。

 

/// <summary>
/// 事件參數基類EventArgs專門用於傳遞事件數據

/// 定義了兩個成員,通過它可以傳遞兩個數據(Name,Age)
/// </summary>
public class CustomeEvetnArgs:EventArgs
{
    string name = string.Empty;
    public string Name
    {
        get { return name; }
        set { name = value; }
    }

    int age = 0;
    public int Age
    {
        get { return age; }
        set { age = value; }
    }

    public CustomeEvetnArgs()
    { }
}

 

M:“下面我們來看看老總(Admin)類裏是怎麼處理的,當員工(Employee)玩遊戲(調用了PlayGame)的時候老總是怎麼得到通知的。”

 

//老總類
public class Admin
{
    /// <summary>
    /// 呼叫老總--

    /// 通過CustomeEvetnArgs事件把玩遊戲的員工信息傳遞過來
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    public void Notify(object sender,CustomeEvetnArgs e)
    {
        StringBuilder resutl = new StringBuilder();
        resutl.Append("員工:" + e.Name + " ");
        resutl.Append("年齡:" + e.Age.ToString() + "歲 ");
        resutl.Append("正在玩遊戲! ");
        resutl.Append("時間:" + DateTime.Now.ToString());
        Console.WriteLine(resutl);
    }
}

 

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

T:“你說得比唱得還好聽,就這麼幾十句代碼,有你說的那麼神嗎?不就不信,好,我去試試。”

 

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

 

class Program
{
    static void Main(string[] args)
    {
        Employee employee = new Employee();
        employee.Name = "張三";
        employee.Age = 22;
        Admin admin = new Admin();

        //通過DelegateMonitorEmployee將兩個類的交互進行了綁定,當employee.Games方法調用後,
        //觸發PlayGame事件,而該事件將被委託給admin的Notify方法處理。
        employee.PlayGame += new DelegateMonitorEmployee(admin.Notify);
        employee.Gages();
    }
}

 

--這裏,老總辦公室裏的警報聲響了,發出了信號;

 

 notify.jpg

 

--小張剛剛啓動遊戲,突然辦公室門開了。進來了一個“人(Admin)”。

 

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

 

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

 

文章到處結束,希望大家多多支持。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章