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);
}
}
}