观察者模式

本文通过C#演示了如何使用观察者模式实现一个热水器温度监控系统,包括热水器、显示器和告警器三个类。热水器类作为被观察对象,显示器和告警器作为观察者,当热水器温度变化时,会通知所有已注册的观察者更新状态。展示了委托和事件在实现观察者模式中的应用。
摘要由CSDN通过智能技术生成

观察者模式是设计模式中一种,解决了一对多依赖关系中对象重用问题,多个观察者对象同时监听某一个对象。C#使用委托、事件可以实现观察者模式
热水器由三个类组成,监听温度:

  1. 显示器:显示温度
  2. 告警器:温度过高,发出警告
  3. 热水器:烧水
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Observer
{
    class Program
    {
        static void Main(string[] args)
        {
            Heater h1 = new Heater();
            Alarm a1 = new Alarm();
            h1.AlarmEvent += new Heater.HeaterHandle(a1.MakeAlert);//注册
            h1.DisplayEvent += new Heater.HeaterHandle(DisPlay.ShowMsg);//注册静态方法
            h1.BoilWater();
            Console.ReadLine();
        }
    }
    public class Heater
    {
        public int temper;//温度
        public delegate void HeaterHandle(int temper);//委托声明
        public event HeaterHandle AlarmEvent;//事件声明
        public event HeaterHandle DisplayEvent;
        public void BoilWater()
        {
            for (int i = 0; i <= 100; i++)
            {
                temper = i;
                if( DisplayEvent != null)
                {
                    DisplayEvent(temper);//通知对象注册的所有方法
                }
                if (i > 95)
                {
                    if (AlarmEvent != null)
                    {
                        AlarmEvent(temper);
                    }
                }
                System.Threading.Thread.Sleep(50);
            }
        }
    }
    public class Alarm
    { 
        //告警类
        public void MakeAlert(int temper)
        {
            //发出警报
            Console.WriteLine("滴滴滴水快烧开了:{0}",temper);
        }
    }
    public class DisPlay
    {
        //显示器类
        public static void ShowMsg(int temper)
        { 
          //静态显示温度方法
            Console.WriteLine("正在加热,当前温度:{0}",temper);
        }
    }
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值