zoukankan      html  css  js  c++  java
  • 观察者设计模式(C#委托和事件的使用)

    观察者设计模式定义了对象间的一种一对多的依赖关系,以便一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动刷新。在现实生活中的可见观察者模式,例如,微信中的订阅号,订阅博客和QQ微博中关注好友,这些都属于观察者模式的应用。

    实现:比如热水器在烧水的过程中,当水温即将烧开时,会发出报警的声音,显示器上会出现温度监控

    转载

    转载

    转载

    static void Main(string[] args)
            {
               
                Mouse mouse = new Mouse("米奇", "黄色");
                Cat cat = new Cat("米奇", "黄色", mouse);
                cat.CatCome();
                Console.ReadKey();
            }
    //被观察者
        class Cat
        {
            private String _name;
            private string _color;
    
            delegate void MyDelegate();//自定义一个委托类型,该委托可以包装一个没有返回值和参数的方法
            private event MyDelegate CatComeEventHandler;//利用委托声明定义一个事件。但是委托和事件并没有本质区别,只是事件不可以在定义它的类外部
           //被访问。事件,具有特殊签名的委托。
            public Cat(string name, string color, Mouse mouse)
            {
                this._name = name;
                this._color = color;
                this.CatComeEventHandler += mouse.MouseRun;//注册事件,将事件指向mouse.MouseRun方法
            }
    
            public void CatCome()
            {
                Console.WriteLine("名字为:" + _name + "的小猫叫了一声");
                CatComeEventHandler();//利用事件调用被注册的方法。CatCome事件发生,被注册的事件也发生。这就是观察者模式。
            }
        }
    //观察者
        class Mouse
        {
            private String _name;
            private String _color;
            public Mouse(string name, string color)
            {
                _name = name;
                _color = color;
            }
            public void MouseRun()
            {
                Console.WriteLine("名字为:" + _name + "的老鼠开始逃跑了");
            }
        }
  • 相关阅读:
    提交暂存更改时报 is outside repository 解决办法
    vue 路由跳转传参
    Unexpected token u in JSON at position 0 解决
    解决element table错位的问题
    使用docker制作Mysql镜像
    Linux系统性能排查
    分盘挂载
    Shell中的变量
    Shell流程控制
    Shell条件判断
  • 原文地址:https://www.cnblogs.com/macT/p/11783057.html
Copyright © 2011-2022 走看看