ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

开发模式

2022-02-10 19:33:03  阅读:170  来源: 互联网

标签:Observer 对象 Alarm 模式 开发 警报器 BoilEvent public


------------恢复内容开始------------

Observer设计模式是为了定义对象间的一种一对多的依赖关系,以便于当一个对象的状态改变时,其他依赖于它的对象会被自动告知并更新。Observer模式是一种松耦合的设计模式。

Observer设计模式中主要包括如下两类对象:

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

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

      namespace Delegate {
          // 热水器
          public class Heater {
             private int temperature;
             public delegate void BoilHandler(int param);   //声明委托
             public event BoilHandler BoilEvent;        //声明事件

             // 烧水
             public void BoilWater() {
                 for (int i = 0; i <= 100; i++) {
                    temperature = i;

                    if (temperature > 95) {
                        if (BoilEvent != null) { //如果有对象注册
                            BoilEvent(temperature);  //调用所有注册对象的方法
                        }
                    }
                 }
             }
          }
          // 警报器
          public class Alarm {
             public void MakeAlert(int param) {
                 Console.WriteLine("Alarm:嘀嘀嘀,水已经 {0} 度了:", param);
             }
          }

          // 显示器
          public class Display {
             public static void ShowMsg(int param) { //静态方法
                 Console.WriteLine("Display:水快烧开了,当前温度:{0}度。", param);
             }
          }
         
          class Program {
             static void Main() {
                 Heater heater = new Heater();
                 Alarm alarm = new Alarm();

                 heater.BoilEvent += alarm.MakeAlert;    //注册方法
                 heater.BoilEvent += (new Alarm()).MakeAlert;   //给匿名对象注册方法
                 heater.BoilEvent += Display.ShowMsg;       //注册静态方法

                 heater.BoilWater();   //烧水,会自动调用注册过对象的方法
             }
          }
      }
      输出为:
      Alarm:嘀嘀嘀,水已经 96 度了:
      Alarm:嘀嘀嘀,水已经 96 度了:
      Display:水快烧开了,当前温度:96度。
      // 省略...

       

------------恢复内容结束------------

标签:Observer,对象,Alarm,模式,开发,警报器,BoilEvent,public
来源: https://www.cnblogs.com/xixi-in-summer/p/15880504.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有