加热器
internal class Heater
{
//水温
private int temperature;
//计时器
private Timer heatTimer;
//事件和委托的声明
public delegate void BoiledEventHandler(object sender, TempratureEventArgs tea);
//事件是基于委托的
public event BoiledEventHandler boiledEvent;
public Heater(int startTemperature)
{
this.temperature = startTemperature;
this.heatTimer = new Timer(1000);
}
//每隔一秒,水温上升1°----烧水
public void BoilWater(object sender,ElapsedEventArgs e)
{
//温度递增
this.temperature++;
if (this.temperature == 100)
{
(sender as Timer).Stop();
}
//事件数据封装
TempratureEventArgs tea = new TempratureEventArgs(temperature);
//触发事件
if (boiledEvent != null)
{
//参数:触发事件的对象,封装了温度信息的类对象
boiledEvent(this, tea);
}
}
public void StartBoilWater()
{
//方法的注册
heatTimer.Elapsed += BoilWater;
//启动计时器
heatTimer.Start();
}
}
显示器
internal class Displayer
{
//显示温度
public void ShowMessage(object sender, TempratureEventArgs tea)
{
Console.WriteLine("当前水温{0}摄氏度",tea.temperature);
}
}
报警器
internal class Alarm
{
//发出警报
public void MakeAlarm(object sender, TempratureEventArgs tea)
{
if (tea.temperature >= 95)
{
if (tea.temperature == 100)
{
Console.WriteLine("水已沸腾");
}
else
{
Console.WriteLine("水快开了,注意安全");
}
}
}
}
温度数据类
internal class TempratureEventArgs:EventArgs
{
//温度
public int temperature;
public TempratureEventArgs(int temperature)
{
this.temperature = temperature;
}
}
主程序类
//代码模拟热水器,加热器、显示器、警报器
internal class Program
{
static void Main(string[] args)
{
WaterHeatTest();
}
static void WaterHeatTest()
{
Heater heater = new Heater(90);
Displayer displayer = new Displayer();
//创建警报器对象
Alarm alarm = new Alarm();
//方法注册
heater.boiledEvent += displayer.ShowMessage;
heater.boiledEvent += alarm.MakeAlarm;
heater.StartBoilWater();
Console.ReadLine();
}
}