由c#事件监听、回调函数引发观察者模式

事件监听:

  C#中的事件,可以简单的理解为类或者对象发生了一件事,并且把这件事通知给了其他的类或者对象,其他的类或者对象可以根据事件的消息有所反应。

这非常类似设计模式中的观察者模式。

  引发事件的类或对象,可以称之为事件源,注册并对处理事件的类或者对象可以称为事件订阅者或者事件监听者,我比较喜欢称之为事件监听者。

回调函数:

  回调函数就是把一个方法的传给另外一个方法去执行。在C#有很多回调函数,比如异步操作的时候。

把任意一个符合这个委托的方法传递进去,意思就是说这部分代码是可变的。而设计上有一个抽离出可变部分代码的原则,这种用法无疑可以用到那种场合了。

软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。

同步调用是一种阻塞式调用,调用方要等待对方执行完毕 才返回,它是一 种单向调用;

回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口;

异步调用是一种类似消息或事件的机制,不过它的调用方向刚好 相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户方的接口)。

回调函数是别的函数通过一个函数指针调用的函数,也就是说,函数指针指向某一块可执行代码的引用。也就是说,回调函数并不神秘,它首先是一个函数,然后有一个函数指针指向它,在别的代码块中,通过这个函数指针调用了这个函数,仅此而已

观察者模式:

  观察者模式定义了对象之间的一对多依赖,当一个对象改变状态时,他的所有依赖者都会受到通知并自动更新。

  1.观察者模式定义了对象之间一对多的关系。

  2.主题(也就是可观察者)用一个共同的接口来更新观察者。

  3.观察者和可观察者用松耦合的方式结合,可观察者不知道观察者的细节,只知道观察者实现了观察者接口

  4.有多个观察者时,不可以依赖特点的通知次序。

其实事件的注册和触犯类似观察者模式,特别是聚合事件就是一种观察者模式!!!

 

 

转载于:https://www.cnblogs.com/iwangjun/archive/2012/04/11/2443136.html

由c#事件监听、回调函数引发观察者模式相关推荐

  1. 【方案篇】事件监听函数的内存泄漏,帮你搞定!不谢!!!

    本文是 理论篇 ,还有下篇 代码篇. 前言 工作中,我们会对window, DOM节点,WebSoket, 或者单纯的事件中心等注册事件监听函数. // window window.addEventL ...

  2. js 监听 安卓事件_百行代码实现js事件监听实现跨页面数据传输

    百行代码实现js事件监听实现跨页面数据传输 使用场景 类似消息队列的使用场景,支持同页面和跨页面通信,发送消息和接收消息 技术原理 跨页面通信: 基于事件监听,通过监听 storage事件监听回调机制 ...

  3. 记一次使用 removeEventListener 移除事件监听失败的经历

    测试一 测试代码如下 var Test = function() {this.element = document.body;this.handler = function() {console.lo ...

  4. java监听机制_详解java的事件监听机制和观察者设计模式

    首先说说监听器: 监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执 行. java的事件监 ...

  5. JS事件之事件绑定与事件监听

    事件绑定   在我们对一个元素绑定了事件处理函数,并且事件触发后,我们才会得到自己想要的与网页的交互.抛开事件监听函数不谈,我们有两种绑定事件处理函数的方法:   1.通过HTML来绑定事件处理函数 ...

  6. 事件绑定,事件监听,事件委托

    事件绑定,事件监听,事件委托 事件绑定 一个元素只能绑定一个事件 obj.on+事件名称=funciton(){} 事件监听 事件监听可以监听很多很多事件. this指向当前调用触发事件的主体对象. ...

  7. 【COCOS CREATOR 系列教程之二】脚本开发篇事件监听、常用函数等示例整合

    本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/cocos-creator/1959.htm ...

  8. android 判断按钮是否已经有onclicklinstener,通过点击事件监听setOnClickListener彻底理解回调...

    前言 老司机们对于回调肯定熟悉得不能再熟悉了,但是新司机可能还是一脸懵逼的,我比较笨,当年懵逼了好久,看夏安明的这一篇博客地址,虽然下边的留言都是,写得好!懂了懂了!但是我当时看了三遍还是不懂好吗 - ...

  9. 通过点击事件监听 setOnClickListener 彻底理解回调-Android

    前言 老司机们对于回调肯定熟悉得不能再熟悉了,但是新司机可能还是一脸懵逼的,我比较笨,当年懵逼了好久,看夏安明的这一篇博客地址,虽然下边的留言都是,写得好!懂了懂了!但是我当时看了三遍还是不懂好吗 - ...

最新文章

  1. 我爱Java系列---【mysql基础约束】
  2. python filter函数
  3. /etc/fstab自动挂载文件详解
  4. pytorch 命令行运行_PyTorch简介与相关安装
  5. [转]经典正则表达式
  6. Java-占位符的使用
  7. C++ string split()和 replaceAll()
  8. 四、基于TCP的服务器端/客户端
  9. 1.0 如何使用cubemx并且移植RTX操作系统?(方法二)
  10. 简单用电脑摄像头实现人脸识别
  11. Securing DevOps 免积分下载
  12. 动态规划求解金矿问题
  13. ios开发 多人语音聊天_iOS语音提醒开发总结
  14. (OC) interface
  15. 路过图床插件,支持一键上传返回各类链接
  16. 代驾APP小程序源码交付 所需功能大全
  17. 力扣(LeetCode)——编译、提交和注释快捷键
  18. 地理坐标系和投影坐标系详解(及坐标系在ArcGIS中的应用)
  19. A* Search Algorithm
  20. 戴尔准备通过收购扩大其云计算业务

热门文章

  1. 【美文赏析】世界上最遥远的距离
  2. 040_Auto.js
  3. (进阶)LeetCode(206)——反转链表(JavaScript)
  4. The following tasks did not complete: first Did you forget to signal async completion?
  5. JavaScript学习(五十二)—继承、call方法和apply方法
  6. java代码实现画板_求好心人帮找或做个JAVA画板程序 代码,主要能实现简单的画板功能!...
  7. 你看到过哪些简短有内涵的一看就想发朋友圈的句子?
  8. ufs3.0和12G内存哪个对流畅运行影响大?
  9. 准备进入股市炒股,资金10万,各位能否给点建议?
  10. 汽车车灯有必要改造成氙气大灯吗?