利用委托和观察者模式模拟热水器,当水温超过95度的时候,扬声器会发出语音, 液晶屏也会改变水温,提示

2019-04-13 21:24发布


public class Program    {
        static void Main(string[] args)
        {
            LoudSpeaker loudSpeaker = new LoudSpeaker();
            Displayer displayer = new Displayer();
            loudSpeaker.AddListen();
            displayer.AddListen();
            WaterHeater waterHeater = new WaterHeater();
            waterHeater.BoilWater();
        }
    }
    class WaterHeater//热水器/被观察者(主体)/被观察的数据载体
    {
        public delegate void Temperature(int temp);//委托监听水温
        public static event Temperature temperature;
        int _temperature = 0;
        public void BoilWater()//烧水功能
        {
            do
            {
                _temperature++;


                if (_temperature > 95)
                {
                    temperature(_temperature);
                }
            }
            while (_temperature < 100);
        }
    }
    interface Observer//观察者监听接口
    {
        void AddListen();
        void RemoveListen();
    }
    class LoudSpeaker : Observer//扬声器/观察者
    {
        public void AddListen()
        {
            WaterHeater.temperature += Speaker;
        }
        public void RemoveListen()
        {
            WaterHeater.temperature -= Speaker;
        }
        public void Speaker(int temp)//广播功能
        {
            Console.WriteLine("水快烧开了!");
        }
    }
    class Displayer : Observer//显示器/观察者
    {
        public void AddListen()
        {
            WaterHeater.temperature += Show;
        }
        public void RemoveListen()
        {
            WaterHeater.temperature -= Show;
        }
        public void Show(int temp)//显示功能
        {
            Console.WriteLine("现在水温{0}度", temp);
        }
    }