Observer 设计模式 了解委托与事件的使用

来源:互联网 发布:死而后已不亦远乎意思 编辑:程序博客网 时间:2024/06/05 09:26
namespace Delegate{    public class Heater    {        private int temperature;         public delegate void BoilHandler(int param);         public event BoilHandler BoilEvent;         public void BoilWater()        {            for (int i = 0; i <= 100; i++)            {                temperature = i;                if (temperature > 95)                {                    if (BoilEvent != null)                    {                         BoilEvent(temperature); // 调用所有注册对象的方法                    }                }            }        }    }     public class Alarm    {        public void MakeAlert(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()        {            Heater heater = new Heater();            Alarm alarm = new Alarm();            heater.BoilEvent += alarm.MakeAlert; // 注册方法            heater.BoilEvent += (new Alarm()).MakeAlert; // 给匿名对象注册方法            heater.BoilEvent += Display.ShowMsg; // 注册静态方法            heater.BoilWater(); // 烧水,会自动调用注册过对象的方法        }    }}

输出为:

// ************************************************************************

Alarm:嘀嘀嘀,水已经 96 度了:

Alarm:嘀嘀嘀,水已经 96 度了:

Display:水快烧开了,当前温度:96 度。

// 省略...

// ************************************************************************


原创粉丝点击