观察者模式的应用

using System;
using System.Collections;
using System.Threading;

namespace Observer
{
    class MainApp
    {
        static void Main()
        {
            Console.Read();

            Heater h = new Heater("加热器", 80);

            h.AttachListener(new Controller("控制器", h));

            h.BoilRice();

            Console.Read();
            Console.ReadKey();
        }
    }

    public class Heater
    {
        private string _name;
        private int _temperature;

        //监视者列表
        private ArrayList _observers = new ArrayList();

        public Heater(string name, int temperature)
        {
            _name = name;
            _temperature = temperature;
        }

        //增加监视者
        public void AttachListener(Controller observer)
        {
            _observers.Add(observer);
        }

        //删除监视者
        public void DetachListener(Controller observer)
        {
            _observers.Remove(observer);
        }

        //煮米饭
        public void BoilRice()
        {
            for (int i = _temperature; i <= 101; i++)
            {
                _temperature = i;
                Thread.Sleep(1);//为观察结果方便
                Console.WriteLine("当前温度{0},正在上涨!", _temperature);

                //当温度超过100时发出通知
                if (_temperature > 100)
                {
                    foreach (Controller c in _observers)
                    {
                        c.Shutdown();
                    }
                }
            }
        }

        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }

        public int Temperature
        {
            get { return _temperature; }
            set { _temperature = value; }
        }
    }

    public class Controller
    {
        private string _name;
        private Heater _sender;
       
        public Controller(string name, Heater sender)
        {
            _name = name;
            _sender = sender;
        }

        //监视者处理通知
        public void Shutdown()
        {
            Console.WriteLine("我是{0},{1}目前的温度为{2}",  _name,  _sender.Name, _sender.Temperature);
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值