冒号课堂§3.4:事件驱动 - 编程入门网
以自由写作的白纸,library是作文素材库;采用framework的程序是一篇成型的作文,作者只需填写空白的词语和段落即可。”
叹号为之一叹:“唉,编程序变成了做填空题,真没劲! ” “那你就多努力,争取以后出填空题吧。”冒号笑着鼓励他,“控制反转不仅增强了framework在代码和设计上的重用性,还极大地提高了framework的可扩展性。这是因为framework的内部运转机制虽是封闭的,但也开放了不少与外部相连的扩展接口点,类似插件(plugin)体系。如下图所示——” 引号联想到另一个名词:“我知道有个依赖反转,与控制反转是一回事吗?” 冒号简答:“虽然不少人把它们看成同义词,但依赖反转原则(Dependency-Inversion Principle,简称DIP)更加具体——高层模块不应依赖底层模块,它们应依赖抽象;抽象不应依赖细节,细节应依赖抽象。经常相提并论的还有依赖注射(Dependency Injection,简称DI)——动态地为一个软件组件提供外部依赖。由于时间关系,不再详加介绍。有一点可以看出,它们的主题是控制与依赖,目的是解耦,方法是反转,而实现这一切的关键是抽象接口。” “为什么说是抽象接口而不是前面所说的回调函数?”打过瞌睡的逗号现在似乎变得特别清醒。 冒号予以说明:“回调函数的提法较为古老,多出现于过程式编程,抽象接口是更现代、更OO的说法。另外从字面上看,‘回调’强调的是行为方式——底层反调高层,而‘抽象接口’强调的是实现方式——正是由于接口具有抽象性,底层才能在调用它时无需虑及高层的具体细节,从而实现控制反转。” 冒号课堂§3.4:事件驱动(6)时间:2011-06-25 BlogJava xyz98众人细细品味着冒号的这番话。 问号忽然惊觉:“我们是不是跑题了?本来是谈事件驱动式编程的,结果从callback谈到控制反转,再到框架,现在又说起了抽象接口。” “事物是普遍联系的嘛。”冒号扯了句哲学套话,“不谙熟callback和IoC机制,就不可能真正领会事件驱动式编程的精髓。不过,也该回到中心主题了。我们通过win32 API用四步实现了一个简单的窗口程序,与事件直接相关的有三步:实现事件处理器(event handler)或事件监听器(event listener);注册事件处理器;实现事件循环(event loop)。具体上,事件处理器负责处理事件,经注册方能在事发时收到通知;事件循环负责侦查事件、预处理事件、管理事件队列和分派事件等,无事时默默等待,有事时立即响应,生命不息工作不止。在整个事件机制中,主循环好比心脏,事件处理器好比大脑,是最重要的两类模块。” 句号指出:“在支持事件驱动的开发环境中,主循环是现成的。许多IDE的图形编辑器在程序员点击控件后,还能自动生成事件处理器的骨架代码,连注册的步骤也免除了。” 冒号提醒他:“并不是总有这样的好事,要知道事件驱动式并不局限于GUI应用,支持事件驱动的开发环境也未必唾手可得。程序员有时必须自行设计整个事件系统,他需要决定:采用事件驱动式是否合适?如果合适,如何设计事件机制?其中包括事件定义、事件触发、事件侦查、事件转化、事件合并、事件调度、事件传播、事件处理、事件连带(event cascade)[5]等等一系列问题。” 叹号扮着苦相说:“我的脑袋就是一个事件监听器,在听到要面临这么多的事件后,迅速作出反应——大了一圈。” 众皆弯腰捧腹。 “脑袋能变大是件好事啊,说明它伸缩性强,相信用它来编的程序也是一样。”冒号打着哈哈,“事件驱动式的程序可伸缩 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |