• c# observer 设计模式


      observer  :主要包含2个对象

        1.subject  被监视者 ,监察对象,必须包含一个监察着感兴趣的东西。

        2.observer 监视者, 负责监视subject对象, 当subject对象的状态发生改变会告知 observer 从而采取相应的方法。

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

        参考一个热水器的例子。

        热水器负责烧水,警报器负责警报,显示器负责显示温度。

        那么热水器就是作为被监视着,警报器和显示器对其属性 温度 感兴趣,当温度达到95度开始报警,显示器显示温度。

                整个事情的发生顺序为:

          1.注册:警报器和显示器告知热水器对其温度感兴趣。

          2.引用:热水器对警报器和显示器产生引用

          3.执行:当温度达到一定值时,热水器调用警报器和显示器的警报方法和显示方法

    namespace @delegate
    {
        //observer 设计模式 是一种松耦合的设计模式,为了定义对象之间一对多的依赖关系,
        //以便一个对象的状态发生改变的时候,其他依赖他的对象被自动告知和更新
        class Program  
        {  
            static void Main(string[] args)
            {
                Heater heater = new Heater();
                Alarm alarm = new Alarm();
                heater.BoilEvent += alarm.MakeAlert;    //注册方法
                heater.BoilEvent += Display.show;       //注册静态方法
                heater.BiolWater();
            }
    
           
        }
    
        public class Heater
        {
            private int temperature;
            public delegate void BoilHandler(int param);    //申明委托
            public event BoilHandler BoilEvent;             //申明事件
            //烧水
            public void BiolWater()
            {
                for (int i = 0; i < 100; i++)
                {
                    temperature = i;
                    if (temperature > 95)
                    {
                        if (BoilEvent != null)
                        { //如果有对象注册
                            BoilEvent(temperature);  //调用所有注册对象的方法
                        }
                    }
                }
            }
        }
    
    
        public class Display //显示器
        {
            public static void show(int param)
            {
                Console.WriteLine("Display:水快烧开了,当前温度为:{0}度",param);
            }
        }
    
        public class Alarm
        {
            public  void MakeAlert(int param)
            {
                Console.WriteLine("Alarm:嘀嘀嘀,水已经 {0} 度了:", param);
            }
        }
    }
  • 相关阅读:
    5860. 从双倍数组中还原原数组
    5847. 找到所有的农场组
    5846. 找到数组的中间位置
    442. 数组中重复的数据
    1987. 不同的好子序列数目
    1986. 完成任务的最少工作时间段
    1985. 找出数组中的第 K 大整数
    1984. 学生分数的最小差值
    学习内容整合
    spring-DI和spring-mybatis整合
  • 原文地址:https://www.cnblogs.com/bubo/p/observer.html
Copyright © 2020-2023  润新知