观察者设计模式(C#委托和事件的使用)

观察者模式是一个老生常谈的问题,但是在实际开发中还是很有用。在观察者设计模式中,有一个被观察者,若干个观察者。当被观察者发生某个动作时,注册到被观察者身上的观察者作出自身的响应(调用观察者的方法)。在被观察者身上,往往通过一个具有特殊签名的委托,即事件。
以下三个类,一个为调用类,一个为被观察者(Cat),一个为观察者(Mouse):

using System;

namespace 委托与事件的学习_观察者设计模式_
{
    //被观察者
    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事件发生,被注册的事件也发生。这就是观察者模式。
        }
    }
}
using System;

namespace 委托与事件的学习_观察者设计模式_
{
    //观察者
    class Mouse
    {
        private String _name;
        private String _color;
        public Mouse(string name,string color)
        {
            _name = name;
            _color = color;
        }
        public void MouseRun()
        {
            Console.WriteLine("名字为:"+_name+"的老鼠开始逃跑了");
        }
    }
}
using System;

namespace 委托与事件的学习_观察者设计模式_
{
    //调用类
    class Program
    {
        static void Main(string[] args)
        {
            Mouse mouse = new Mouse("米奇", "黄色");
            Cat cat = new Cat("米奇", "黄色", mouse);
            cat.CatCome();
            Console.ReadKey();
        }
    }
}

总结:猫为被观察者,老鼠为观察者。猫类里面有一个委托,和利用该委托定义的事件。每个老鼠的一个行为(方法)注册到了猫的身上,当猫发生某个
行为时,触发了注册到猫身上的老鼠的一个方法(行为)。
注意:猫(被观察者)有一个委托,和一个事件,并且有一个触发整个方法链的一个初始方法,在该方法内调用事件(包装了观察者(老鼠)的行为)。整个行为链为:猫发出某个动作,老鼠相应的动作接着发生。
老鼠类里里面有一个方法,这个方法必须注册到猫的事件里,在猫的初始方法里调用这个事件,即是调用老鼠的方法。
至于事件的注册:可以在猫类里面注册,前提是必须将老鼠对象传递过来。也可以在老鼠类里面注册事件,这种情况可以使用单例模式。

这里写图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值