【案例】有个高档的热水器,包含一个加热器,一个报警器和一个现实屏,我们给热水器它通上电,当水温超过95度的时候:
1、报警器会开始发出语音,告诉你水的温度;
2、液晶屏也会改变水温的显示,来提示水已经快烧开了。
请使用观察者模式Observer表述上述三个关系,并在main方法里进行测试。
代码如下:
namespace ConsoleApp1 { class Program { static void Main(string[] args) { Heater ht = new Heater(); Alarm alarm = new Alarm(); Display display = new Display(); ht.BoilEvert += alarm.MakeAlert; ht.BoilEvert += display.ShowMsg; ht.BoilWater(); Console.Read(); } } public class Heater { private int temperature; public delegate void BoilHandler(int param); public event BoilHandler BoilEvert; public void BoilWater() { for (int i = 0; i <= 100; i++) { temperature = i; if (temperature > 95) { if (BoilEvert != null) { BoilEvert(temperature); } } } } } public class Alarm { public void MakeAlert(int param) { Console.WriteLine("alarm:滴滴滴,水已经有{0}度了", param); } } public class Display { public void ShowMsg(int param) { Console.WriteLine("display:水快开了,当前温度:{0}度", param); } } }
运行结果如下图所示:
【案例】有一家三口,妈妈负责做饭,爸爸和孩子负责吃。。。将这三个人,想象成三个类。
妈妈有一个方法,叫做“做饭”。有一个事件,叫做“开饭”。做完饭后,调用开发事件,发布开饭消息。
爸爸和孩子分别有一个方法,叫做“吃饭”。
在main方法里,将爸爸和孩子的“吃饭”方法,注册到妈妈的“开饭”事件。也就是,订阅妈妈的开饭消息。让妈妈做完饭开饭时,发布吃饭消息时,告诉爸爸和孩子一声。
代码如下:
namespace ConsoleApp2 { class Program { static void Main(string[] args) { Mom mom = new Mom(); Dad dad = new Dad(); Son son = new Son(); mom.EatEvent += son.Eat; mom.EatEvent += dad.Eat; mom.Cook(); Console.ReadLine(); } } public class Mom { public delegate void EatHandler(); public event EatHandler EatEvent; private void OnEat() { if (EatEvent != null) { EatEvent(); } } public void Cook() { Console.WriteLine("妈妈开始煮饭"); Console.WriteLine("妈妈开始炒菜"); OnEat(); } } public class Dad { public void Eat() { Console.WriteLine("爸爸:好的我这就来吃饭"); } } public class Son { public void Eat() { Console.WriteLine("儿子:等一会就去吃饭 "); } } }
运行结果如下图所示:
原文:https://www.cnblogs.com/programme-maker/p/10901888.html