.Net 事件模式 猫叫一声,所有的老鼠都开始逃跑,主人被惊醒。

 

16.  .Net 事件模式 【程序设计 : 猫叫一声,所有的老鼠都开始逃跑,主人被惊醒。 (C# 语言 )

要求: 1. 要有联动性,老鼠和主人的行为是被动的。 2. 考虑可扩展性,猫的叫声可能引起其他联动效应。】

解答:

//1 、定义一个类型用于保存所有需要发送给事件通知接受者的附加信息(继承于 System.EventArgs

public class CryArgs : EventArgs

        {

            public readonly string Name;

            public CryArgs(string name)

            {

                this .Name = name;

            }

        }

//2 、定义一个委托类型,用于指定事件触发时被调用的方法类型
public delegate void SubEventHandler (object sender,CryArgs cryArgs);

//3 、定义一个事件成员
public   class Subject

    {

        public event SubEventHandler SubEvent;

        protected virtual void FireAway(CryArgs cryArgs)

        {

            if (this .SubEvent != null )

                this .SubEvent(this ,cryArgs);

        }  

 

    }

    public class Cat : Subject

    {

        private string name;

        public Cat(string name)

        {

            this .name = name;

        }

        public void Cry()

        {

            CryArgs cryArgs = new CryArgs (name);

            //Console.WriteLine("cat cryed.");

             this .FireAway(cryArgs);

        }

    }

//4 、定义一个受保护的虚方法,负责通知事件的登记对象
public abstract class Observer

    {

        public Observer(Subject sub)

        {

            sub.SubEvent += new SubEventHandler (Response);

        }

        public abstract void Response(object sender,CryArgs cryArgs);   

    }

  //5 、定义一个方法,将输入转化为期望的事件
public class Mouse : Observer

    {

        private string name;

        public Mouse(string name, Subject sub) : base (sub)

        {  

            this .name = name;

        }

        public override void Response(object sender, CryArgs cryArgs)

        {

            Console .WriteLine(cryArgs.Name+" ," +name + " attempt to escape!" );

        }

    }

    public class Master : Observer

    {

        public Master(Subject sub) : base (sub){}

        public override void Response(object sender, CryArgs cryArgs)

        {

            Console .WriteLine(cryArgs.Name + " ," + "host waken" );

        }

    }

// 注册事件

static void Main(string [] args)

        {

            Cat c = new Cat ("laomao" );

            Mouse mouse = new Mouse ("haozi" , c);

            Master master = new Master (c);

            c.Cry();                      

        }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值