使用委托事件的机制完成:天气监测系统

有三种显示天气数据的显示器,显示器随时可以添加到检测系统中,也可以随机从系统中移除。

有一个“中控”可以实时获取天气的真实数据

当“中控”获取的数据发生变化时,所有的显示器也同步更新显示。

 

using System;
using System.Collections.Generic;

// 定义中控系统类
class WeatherControlSystem
{
    // 温度属性
    public int Temperature { get; set; }

    // 湿度属性
    public int Humidity { get; set; }

    // 风力属性
    public int WindSpeed { get; set; }

    // 定义显示的委托
    public delegate void DisplayDelegate(int temperature, int humidity, int windSpeed);

    // 定义显示的事件
    public event DisplayDelegate DisplayEvent;

    // 触发事件的函数
    public void TriggerDisplayEvent()
    {
        DisplayEvent?.Invoke(Temperature, Humidity, WindSpeed);
    }
}

// 温度显示器
class TemperatureDisplay
{
    public void DisplayTemperature(int temperature, int humidity, int windSpeed)
    {
        Console.WriteLine("温度显示器:当前温度为 " + temperature + "℃");
    }
}

// 风力显示器
class WindSpeedDisplay
{
    public void DisplayWindSpeed(int temperature, int humidity, int windSpeed)
    {
        Console.WriteLine("风力显示器:当前风力为 " + windSpeed + "级");
    }
}

// 湿度显示器
class HumidityDisplay
{
    public void DisplayHumidity(int temperature, int humidity, int windSpeed)
    {
        Console.WriteLine("湿度显示器:当前湿度为 " + humidity + "%");
    }
}

class Program
{
    static void Main(string[] args)
    {
        WeatherControlSystem weatherControlSystem = new WeatherControlSystem();

        TemperatureDisplay temperatureDisplay = new TemperatureDisplay();
        WindSpeedDisplay windSpeedDisplay = new WindSpeedDisplay();
        HumidityDisplay humidityDisplay = new HumidityDisplay();

        // 添加显示器到中控系统的显示事件中
        weatherControlSystem.DisplayEvent += temperatureDisplay.DisplayTemperature;
        weatherControlSystem.DisplayEvent += windSpeedDisplay.DisplayWindSpeed;
        weatherControlSystem.DisplayEvent += humidityDisplay.DisplayHumidity;

        // 测试数据更新
        for (int i = 1; i <= 5; i++)
        {
            weatherControlSystem.Temperature = i * 10;
            weatherControlSystem.Humidity = i * 5;
            weatherControlSystem.WindSpeed = i;
            weatherControlSystem.TriggerDisplayEvent();
            Console.WriteLine();
        }

        // 从中控系统的显示事件中移除湿度显示器
        weatherControlSystem.DisplayEvent -= humidityDisplay.DisplayHumidity;

        Console.WriteLine("移除湿度显示器后:");
        // 测试数据更新
        for (int i = 1; i <= 5; i++)
        {
            weatherControlSystem.Temperature = i * 10;
            weatherControlSystem.Humidity = i * 5;
            weatherControlSystem.WindSpeed = i;
            weatherControlSystem.TriggerDisplayEvent();
            Console.WriteLine();
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值