有三种显示天气数据的显示器,显示器随时可以添加到检测系统中,也可以随机从系统中移除。
有一个“中控”可以实时获取天气的真实数据
当“中控”获取的数据发生变化时,所有的显示器也同步更新显示。
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();
}
}
}