温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C# Observer设计模式是什么

发布时间:2021-12-02 11:13:03 来源:亿速云 阅读:121 作者:iii 栏目:编程语言

这篇文章主要讲解了“C# Observer设计模式是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C# Observer设计模式是什么”吧!

我们来看一个新的范例,因为有很多相关的内容,所以本文的进度会稍微快一些:

假设我们有个高档的热水器,我们给它通上电,当水温超过95度的时候:
1、扬声器会开始发出语音,告诉你水的温度;
2、液晶屏也会改变水温的显示,来提示水已经快烧开了。

现在我们需要写个程序来模拟这个烧水的过程,我们将定义一个类来代表热水器,我们管它叫:Heater,它有代表水温的字段,叫做temperature;当然,还有必不可少的给水加热方法BoilWater(),一个发出语音警报的方法MakeAlert(),一个显示水温的方法,ShowMsg()。

namespace Delegate {  class Heater {  private int temperature; // 水温  // 烧水  public void BoilWater() {  for (int i = 0; i <= 100; i++) {  temperature = i;   if (temperature > 95) {  MakeAlert(temperature);  ShowMsg(temperature);  }  }  }   // 发出语音警报  private void MakeAlert(int param) {  Console.WriteLine("Alarm:嘀嘀嘀,水已经 {0} 度了:" , param);  }     // 显示水温  private void ShowMsg(int param) {  Console.WriteLine("Display:水快开了,当前温度:{0}度。" , param);  }  }   class Program {  static void Main() {  Heater ht = new Heater();  ht.BoilWater();  }  }  }

C# Observer设计模式简介

上面的例子显然能完成我们之前描述的工作,但是却并不够好。现在假设热水器由三部分组成:热水器、警报器、显示器,它们来自于不同厂商并进行了组装。那么,应该是热水器仅仅负责烧水,它不能发出警报也不能显示水温;在水烧开时由警报器发出警报、显示器显示提示和水温。

这时候,上面的例子就应该变成这个样子:

// 热水器  public class Heater {  private int temperature;     // 烧水  private void BoilWater() {  for (int i = 0; i <= 100; i++) {  temperature = i;  }  }  }   // 警报器  public class Alarm{  private void MakeAlert(int param) {  Console.WriteLine("Alarm:嘀嘀嘀,水已经 {0} 度了:" , param);  }  }   // 显示器  public class Display{  private void ShowMsg(int param) {  Console.WriteLine("Display:水已烧开,当前温度:{0}度。" , param);  }  }

这里就出现了一个问题:如何在水烧开的时候通知报警器和显示器?在继续进行之前,我们先了解一下C# Observer设计模式,C# Observer设计模式中主要包括如下两类对象:

1. Subject:监视对象,它往往包含着其他对象所感兴趣的内容。在本范例中,热水器就是一个监视对象,它包含的其他对象所感兴趣的内容,就是temprature字段,当这个字段的值快到100时,会不断把数据发给监视它的对象。
2. Observer:监视者,它监视Subject,当Subject中的某件事发生的时候,会告知Observer,而Observer则会采取相应的行动。在本范例中,Observer有警报器和显示器,它们采取的行动分别是发出警报和显示水温。

在本例中,事情发生的顺序应该是这样的:

1. 警报器和显示器告诉热水器,它对它的温度比较感兴趣(注册)。
2. 热水器知道后保留对警报器和显示器的引用。
3. 热水器进行烧水这一动作,当水温超过95度时,通过对警报器和显示器的引用,自动调用警报器的MakeAlert()方法、显示器的ShowMsg()方法。

类似这样的例子是很多的,GOF对它进行了抽象,称为C# Observer设计模式:C# Observer设计模式是为了定义对象间的一种一对多的依赖关系,以便于当一个对象的状态改变时,其他依赖于它的对象会被自动告知并更新。Observer模式是一种松耦合的设计模式。

感谢各位的阅读,以上就是“C# Observer设计模式是什么”的内容了,经过本文的学习后,相信大家对C# Observer设计模式是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI