C#设计模式-观察者模式与事件的一点小小心得

由于经验和能力有限,设计模式这种高大上的东西要研究下来,不知道要秃了多少根头发,作为一个初学者,也只能简单的理解一下大概思路

最近刚好在恶补基础,看到了事件event  看大佬的博客和资料一大串,几百行 还没看已经晕掉了

只能先简化一下,说一下自己的理解

事件 Event 

通过大佬的资料,事件可以理解为一个特殊的多播委托

声明一个委托就像声明一个类 ,但是比类的声明多了参数类型和返回方法   如 delegate void Mydelegate();

这个委托声明的类型指定了可以被这个委托变量调用的方法的参数类型和返回类型

正常情况下要想使用委托,就要定义一个委托类型的变量或者说一个委托类型的对象来使用

Mydelegate hander;

事件event 就是在这个基础上 加上event 关键字

Event  Mydelegate hander;

事件和委托在声明的时候必须在类中声明,方法中不行

话不多说,说一下本人对这个观察者模式的理解:

既然存在观察者,那么一定有一个被观察者,被观察者做了什么举动会立马被观察者察觉到,然后做出对应的举动。

举个通俗的猫和老鼠的例子:老鼠是观察者,猫是被观察者 当猫来了以后,老鼠会立马知道,然后逃跑。

这里面用事件或者委托都可以;

上代码:

猫的类

using System;


namespace Event_Watch
{
    /// <summary>
    /// 猫-被观察者
    /// </summary>
    public class Cat
    {
        public Cat(string name,int age)
        {
            Name = name;
            Age = age;
        }
        public delegate void Myhander();

        public event Myhander CatEvent;//事件
        public string Name { get; set; }
        public int Age { get; set; }

        /// <summary>
        /// 当被观察者发生变化时,就要通知观察者
        /// </summary>
        public void CatComing()
        {
            Console.WriteLine("有一只{0}岁猫{1}进来了",Age,Name);
            if (CatEvent != null)
            {
                CatEvent();
            }
        }
    }
}

老鼠的类

using System;


namespace Event_Watch
{
    /// <summary>
    /// 老鼠-观察者
    /// </summary>
    public class Mouse
    {
        /// <summary>
        /// 老鼠看到猫了,就要开始跑了
        /// </summary>
        /// <param name="name"></param>
        /// <param name="cat"></param>
        public Mouse(string name,Cat cat)
        {
            Name = name;
            cat.CatEvent += Run;//观察者开始关注被观察者的一举一动


        }
        public string Name { get; set; }

        /// <summary>
        /// 观察者的行为
        /// </summary>
        public void Run()
        {
            Console.WriteLine("{0}老鼠快跑",Name);
        }
    }
}

如何用呢

using System;

namespace Event_Watch
{
    class Program
    {
        
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            Cat cat = new Cat("蓝胖子", 1);

            Mouse mouse = new Mouse("",cat);
            Mouse mouse2 = new Mouse("", cat);
            cat.CatComing();
        }
    }
}

这里创建老鼠对象的传入猫的实例对象,表示为老鼠看到猫了

一个简单的例子就是这样了

猜你喜欢

转载自www.cnblogs.com/redline/p/9986825.html