zoukankan      html  css  js  c++  java
  • 老鼠出现引发的血案

    老话题,委托、事件和方法,经典的案例,重新搞一下。

    /*      老鼠出现引发的血案 ^_^
    测试目标:老鼠出现后,猫叫,吓跑了老鼠且惊醒睡觉的主人,主人打猫,猫逃跑,老鼠乐了。
    实现方法:先定义对象、再定义动作、再定义事件
    实现理念:要事件驱动,关键事件MouseComeOut-老鼠出现、CatCry-猫叫、HitCat 主人打猫
     * Mouse :ComeOut()、Escape()动作;订阅Cat.Cry()-->Escape()
     * Cat:Cry()、Smile()、Escape()动作;订阅Mouse.ComeOut()-->Cry()
     * Man:Wakeup()、HitCat()动作;订阅Cat.Cry()-->Wakeup()
     *                                                                  -->HitCat()-->Cat.Escape()
    结论:事件提供低耦合调用多个对象方法的特性;在使动者的方法内调用以引发事件!
    */

    using System;

    namespace DelegateAndEvent
    {
        
    public delegate void delegateMouseComeOut();
        
    public delegate void delegateCatCry();
        
    public delegate void delegateManHitCat();

        
    public class Mouse
        {
            
    public event delegateMouseComeOut eventMouseComeOut;

            
    public void ComeOut()
            {
                Console.WriteLine(
    "Mouse.ComeOut()\tHi,I'm a Mouse, I'm Comming Out NOW.");
                eventMouseComeOut(); 
    //触发eventMouseComeOut事件,监听该事件的方法将被调用
            }

            
    public void Escape()
            {
                Console.WriteLine(
    "Mouse.Escape()\tSomething Dangerouse! Escape NOW!");
            }

            
    public void Smile()
            {
                Console.WriteLine(
    "Mouse.Smile()\tHa,Ha! It's So FUNNY!");
            }
        }

        
    public class Cat
        {
            
    public event delegateCatCry eventCatCry;

            
    public void Cry()
            {
                Console.WriteLine(
    "Cat.Cry()\tWhat's THAT! \"Don't GO!\"");
                eventCatCry();
            }

            
    public void Escape()
            {
                Console.WriteLine(
    "Cat.Escape()\tDangerouse! Escape NOW!");
            }
        }


        
    public class Man
        {
            
    public event delegateManHitCat eventManHitCat;

            
    public void WakeUp()
            {
                Console.WriteLine(
    "Man.WakeUp()\tSo Noising! What's UP!");
            }
            
    public void HitCat()
            {
                Console.WriteLine(
    "Man.HitCat()\tFucking Cat, Can you be QUIET!");
                eventManHitCat();
            }
        }

        
    /* 
    Mouse.ComeOut() Hi,I'm a Mouse, I'm Comming Out NOW.
    Cat.Cry()       What's THAT! "Don't GO!"
    Man.WakeUp()    So Noising! What's UP!
    Man.HitCat()    Fucking Cat, Can you be QUIET!
    Cat.Escape()    Dangerouse! Escape NOW!
    Mouse.Smile()   Ha,Ha! It's So FUNNY!
    Mouse.Escape()  Something Dangerouse! Escape NOW!
         * 
    */
        
    public class RunApplication
        {
            
    static void Main()
            {
                Mouse mouse 
    = new Mouse();
                Cat cat 
    = new Cat();
                Man man 
    = new Man();

                mouse.eventMouseComeOut 
    += new delegateMouseComeOut(cat.Cry);
                cat.eventCatCry 
    += new delegateCatCry(man.WakeUp);
                cat.eventCatCry 
    += new delegateCatCry(man.HitCat);
                cat.eventCatCry 
    += new delegateCatCry(mouse.Escape);
                man.eventManHitCat 
    += new delegateManHitCat(cat.Escape);
                man.eventManHitCat 
    += new delegateManHitCat(mouse.Smile);

                mouse.ComeOut();    
    //引发一系列的动作,靠事件:eventComeOut
                Console.ReadKey();
            }
        }
    }
  • 相关阅读:
    Java 签名(SHA1WithRSA、SHA256WithRSA、SHA256withECDSA)
    记一次用WireShark抓包摆脱Si服后台限制的过程
    反向代理Nginx
    对于新能源Can数据、电池BMS等字节和比特位的解析
    WireShark抓包命令
    .NET下寄宿于控制台的HTTPS监听
    RSA等非对称加密为什么要用公钥加密,而用私钥解密?
    FTP、SFTP与FTPS
    Python打包方法——Pyinstaller
    [Python爬虫]煎蛋网OOXX妹子图爬虫(1)——解密图片地址
  • 原文地址:https://www.cnblogs.com/flaaash/p/2019553.html
Copyright © 2011-2022 走看看