事件的用法

来源:互联网 发布:公共广播网络终端机 编辑:程序博客网 时间:2024/06/15 11:47

事件适合 一个对象的状态改变时,其他依赖于它们的对象会被自动告知并更新。

 

比如现在有一个例子  :假设我们有一热水器,当水温超过95度时,  1.扬声器会开始发出语音,告诉你温度。2液晶屏也会改变水温的显示,来提示水已经烧开了。  现在假设 热水器由三部分组成:热水器  、警报器 、显示器。它们来自于不同厂商进行组装。热水器仅仅负责烧水,它不能发出警报也不能显示水温;在水烧开时由警报器发出警报、显示器显示提示和水温。

 

事件就适合这个例子,    温度改变到95度时,依赖于温度的  报警器和显示器都要被告知,并且更新。

 

public     class   Heater

{

       private int   temperature;

       public  delegate  void  BoilHandler(int  param);//声明委托

       public   event   BoilHandler  BoilEvent;//声明事件

 

           //烧水

 

         private  void   BoilWater()

        {

           for (int i=0;i<=100;i++)

              {

                  temperature=i;

                   if(temperature>95)

                     {

                          if(BoilEvent!=null)

                              {

                                  //如果有对象注册

                                 BoilEvent(temperature);

                                  //调用所有注册对象的方法

                                  // 委托是一个带有(temperature)参数的代表。

                                }

                     }

               }

         }

}

 

public    class  Alarm

{

            public   void   MakerAlert(int  param)

           {

              Console.WriteLine("Alarm:滴滴滴,水已经{0}度了;",param);

              }

}

 

public     class   Display

{

       public  static void ShowMsg(int param)
        {
            Console.WriteLine("Display:水快开了,当前温度:{0}", param);

       }

}

 

Class   Program

{

           static   void Main  (stirng[]  args)

        {

            Heater   heater=new  Heater();

           Alarm  alarm=new  Alarm();

           heater.BoilEvent+=alarm.MakeAlert;//注册方法 

            heater.BoilEvent+=Display.ShowMsg;//注册静态方法 

            heater.BoilWater();//烧水,会自动调用注册过对象的方法

        }

}

 

 

 

 

Observer设计模式:主要包含两个对象
Subject:监视对象,它往往包含着其他对象所感兴趣的内容,热水器就是一个监视对象,它包含着其他对象比较感兴趣的内容,就是temprature字段,当这个字段的值快到100时,会不端把数据发给监视它的对象
Observer:监视者,它监视Subject.当Subject中的某件事发生的时候,会告诉ObServer.而Observer会采取行动,比如在本实例中,监视者是警报器和现实器,它们采取的行动分别是发出警报和显示水温。
1.警报器和显示器告诉热水器,它对它的温度比较感兴趣(  注册   )。
2.热水器知道后保留对警报器和显示器的引用。
3.热水器进行烧水这一动作,当水温超过95度时,通过对警报器和显示器的引用,自动调用警报器的MakeAlert()方法和ShowMsg()方法。

 

Observer 设计模式是为了定义对象间的一种一对多的依赖关系,以便于当一个对象的状态改变时,其他依赖于它的对象会被自动告知并更新。

 

原创粉丝点击