• 观察者模式之烧开水


     观察者模式一直是架构设计中的重点模式

     比较常用的案例就是烧开水

     流程:烧水-->水烧开-->屏幕外显温度,报警器报警

     核心:委托和事件

     委托

              首先明确它是什么?其实是一个类,定义一个委托即定义一个类.

              那么是什么类?用来说明方法的类型的类。字段有类型,方法其实也有类型,就是委托。

              委托是某一类方法的定义。

       事件

              事件是某个类用于传递消息的方式。

              事件之于委托,犹如属性之于变量即是委托的封装。

       示例

            鼠标点击button对象,触发button的click事件,winform捕获到了事件然后进行了处理。

            winform是怎么捕获的呢?连接它们的桥梁其实是委托。winform通过某一类委托向button的click事件注册自己的方法,当事件发生时方法就被调用了。

        public delegate void WaterHeated(int i);
        public class WaterMachine
        {
            public event WaterHeated onWaterHeated;
            public void HeatWater()
            {
                for (int i = 0; i < 11; i++)
                {
                    if (i < 10)
                    {
                        Thread.Sleep(1000);
                        Console.WriteLine("水正在加热");
                    }
                    else
                    {
                        OnWaterHeated(i);
                    }
                }
            }
    
            internal void OnWaterHeated(int i)
            {
                if (onWaterHeated != null)
                {
                    onWaterHeated(i);
                }
            }
        }
    
        public class Screen
        {
            public void ShowTemprature(int i)
            {
                Console.WriteLine("当前温度:{0}", i.ToString());
            }
        }
    
        public class Beeper
        {
            public void Alarm(int i)
            {
                Console.WriteLine("水已烧开");
            }
        }

    static void Main(string[] args)
    {
       //观察者
       WaterMachine wm = new WaterMachine();
       wm.onWaterHeated += (new Screen()).ShowTemprature;
       wm.onWaterHeated += (new Beeper()).Alarm;
       wm.HeatWater();
       Console.ReadKey();
    }

  • 相关阅读:
    期望最大化(Expectation Maximization)算法简介和Python代码实现
    LCE:一个结合了随机森林和XGBoost优势的新的集成方法
    90个Numpy的有用的代码片段
    5篇关于3D 卷积的最新论文推荐
    SQL 题目——必知必会
    Go 语言标准库之 context 包
    SQL 题目——入门篇
    Go 语言标准库之 encoding/json 包
    Git 命令入门
    MySQL 入门
  • 原文地址:https://www.cnblogs.com/tiantianle/p/9247009.html
Copyright © 2020-2023  润新知