由c#事件监听、回调函数引发观察者模式
由c#事件监听、回调函数引发观察者模式
事件监听:
C#中的事件,可以简单的理解为类或者对象发生了一件事,并且把这件事通知给了其他的类或者对象,其他的类或者对象可以根据事件的消息有所反应。
这非常类似设计模式中的观察者模式。
引发事件的类或对象,可以称之为事件源,注册并对处理事件的类或者对象可以称为事件订阅者或者事件监听者,我比较喜欢称之为事件监听者。
回调函数:
回调函数就是把一个方法的传给另外一个方法去执行。在C#有很多回调函数,比如异步操作的时候。
把任意一个符合这个委托的方法传递进去,意思就是说这部分代码是可变的。而设计上有一个抽离出可变部分代码的原则,这种用法无疑可以用到那种场合了。
软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。
同步调用是一种阻塞式调用,调用方要等待对方执行完毕 才返回,它是一 种单向调用;
回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口;
异步调用是一种类似消息或事件的机制,不过它的调用方向刚好 相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户方的接口)。
回调函数是别的函数通过一个函数指针调用的函数,也就是说,函数指针指向某一块可执行代码的引用。也就是说,回调函数并不神秘,它首先是一个函数,然后有一个函数指针指向它,在别的代码块中,通过这个函数指针调用了这个函数,仅此而已
观察者模式:
观察者模式定义了对象之间的一对多依赖,当一个对象改变状态时,他的所有依赖者都会受到通知并自动更新。
1.观察者模式定义了对象之间一对多的关系。
2.主题(也就是可观察者)用一个共同的接口来更新观察者。
3.观察者和可观察者用松耦合的方式结合,可观察者不知道观察者的细节,只知道观察者实现了观察者接口
4.有多个观察者时,不可以依赖特点的通知次序。
其实事件的注册和触犯类似观察者模式,特别是聚合事件就是一种观察者模式!!!