最近看到了这样一篇博客,感觉写的很好。尤其是它其中叙述的这种基于事件的模型。
博客地址: http://www.ibm.com/developerworks/cn/java/l-niosvr/#icomments
我也是照猫画虎的写了个示例程序,不知道对不对我斗胆描述一下这个结构:
1.定义一个接口,定义需要提供的服务。
2.定义一个抽象类(或者普通的类)实现上述接口,实现接口的所有服务,实现内容都为空的。
3.接下来,用户可以根据自己的需要通过继承以上的类来重写接口的服务,实现自己想要的服务。想写多少写多少,想写几个写几个。这个属于用户自定义的Handle。
4.最后一步,需要一个触发器。触发器内部维护一个List以保持那些用户添加进来的自定义Handle。这个触发器采用单例模式,通过提供addListener方法向List中添加Handle。最后再提供对应于1中接口的所有服务的的触发调用函数,大概像这样:
public void fireService1(){ for(int i=0;i<listeners.size();i++){ ((MyListener)listeners.get(i)).opService1(); } }
大功告成,神奇的效果出来了:
当用户自定义了几个Handle后,通过addListener方法注册后,在执行fireServiceX的时候,虽然他是将List中的所有Handle的ServiceX都执行了一遍,但实际上由于Handle重写的服务不同,若Handle1没有重写ServiceX,则会执行其父类的ServiceX,但是其父类的ServiceX是空的,也就什么都不执行了。
相关推荐
摘要本文档提供了Handle系统的名称空间和服务体系结构的概述,以及它与其他互联网服务(如DNS、LDAP/X.500)的关系。Handle系统是一种通用的全局
摘要Handle系统是一种通用的全局名称服务,它允许在公共互联网上进行安全的名称解析和管理。本文档提供了Handle系统名称空间及其数据、服务和操作模型的详细描
本质上讲,Win32 结构化异常处理是操作系统提供的一种服务。编译器的运行时库对这种服务操作系统实现进行了封装,而所有能找到的介绍 SEH 的文档讲的都是针对某一特定编译器的运行时库。关键字 _try、_finally 和 _...
一种用于处理2D简单网格的拓扑数据结构(使用作者发布的Morse运算符)。 该数据结构是使用C ++实现的,它基于经典的Half-Edge。 该代码始于2002年,已在许多国家中使用。
<?... namespace Streamer\Test; use Streamer\Stream; class StreamTest extends \PHPUnit_Framework_TestCase ...面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。
从以上可以看出,handles结构其实是为用户提供了一种比较方便的在不同gui之间共享数据的方法。 以上纯属个人经验,如有错误,欢迎指正,先谢过。 以下为示例程序,免费提供给大家,欢迎大家提出宝贵意见...
* 内核也提供了一种用于推迟行动事件功能 源码结构如下: ke_config.h 用来裁剪和设置kernel ke_env.c, .h 配置内核的环境变量 ke_event.c; .h 事件处理相关 ke_mem.c; .h 内存管理模块 ke_msg.c, .h 消息的创建处理...
资料夹结构├── functions│ ├── dist # auto generated dist ver by babel│ ├── modules # aux helpers│ ├── nuxt # auto generated nuxt directory│ ├── ssrapp.js # handle nuxt SSR logic│ └...
泳池男孩 Poolboy通过允许用户请求资源提供者和预先配置的资源池满足的资源,从而提供了一种管理OpenShift资源的结构。 这允许用户在集群中管理他们无法通过基于Kubernetes基于角色的访问控制直接访问的资源。泳池...
从缓冲区溢出说起,这样一种针对系统脆弱性的威胁,最根本的问题还是在于对于用户的输入没有进行检查。作为主要威胁之一的SQL注入带来了人们对于其应用和数据库的担忧。这个问题的出现有十年的时间了,但是现在仍旧...
种类型的壳以及如何优化脱壳后的 PE 结构,那么你也就可能需要将修复后的资源节加载 在你认为更合适的 RVA 地址起始处。该功能接口能满足你的这个定制需要,由于该功能的 相对复杂性,要求使用者对 PE 结构必须...
Delphi基于Ring0技术读写Windows系统下的硬盘物理扇区,磁盘读写操作一例,包括了VxD和仿CIH两种方法,VxD方法中还包括了所调用控件的VC 源代码,并且包括了一个测试的例子,运行效果如演示截图所示。相关的源代码...
本文基于区块链系统的分布式账本数据一致性, 提出了一种基于区块链的持久标识符系统, 在兼容现有标识符系统访问层的基础上, 提供存储层以保证标识符解析服务持久性及数据的长期正确保存. 基于Handle系统及 Hyper...
(映射是一个表示一一对应关系的数学术语 —— 当内存的虚拟地址有一个对应的物理地址来存储内存内容时,该内存将被映射。) 基于 UNIX 的系统有两个可映射到附加内存中的基本系统调用: brk:brk() 是一个非常...
Visual Leak Detector使用了一种方法来获得当前的程序计数器。首先,它调用一个函数,则这个函数的返回地址就是当前的程序计数器,而函数的返回地址可以很容易的从堆栈中拿到。下面是Visual Leak Detector获得当前...
在这一步我们需要构建一组帮助解析的表结构。这需要对"proto_register_rdp"函数做些修改。首先定义一组静态数组。 例5 定义数据结构 static hf_register_info hf[]= { { &hf;_rdp_version, { "TPKT Header:Version",...
_取可执行文件类型() 判断指定文件是哪一种类型的可执行文件。返回值非零表示成功,零表示失败。 _取压缩文件尺寸() 判断一个压缩文件在磁盘上实际占据的字节数。返回文件长度。&HFFFFFFFF表示出错。注意如...
(映射是一个表示一一对应关系的数学术语 —— 当内存的虚拟地址有一个对应的物理地址来存储内存内容时,该内存将被映射。) 基于 UNIX 的系统有两个可映射到附加内存中的基本系统调用: brk: brk() 是一个非常...
上面三种IO模型其实是一回事,都是类select模型,适合开发小型服务器或者客户端程序,而不适合需要接受成千上万连接的服务器程序。Overlapped I/O是异步IO模型,但是它需要程序员关心线程池的实现和调度〔类似Linux下面...