`

一种Handle结构

 
阅读更多

     最近看到了这样一篇博客,感觉写的很好。尤其是它其中叙述的这种基于事件的模型。

     博客地址: 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是空的,也就什么都不执行了。

分享到:
评论

相关推荐

    rfc3650(Handle系统概述)1

    摘要本文档提供了Handle系统的名称空间和服务体系结构的概述,以及它与其他互联网服务(如DNS、LDAP/X.500)的关系。Handle系统是一种通用的全局

    rfc3651(Handle系统名称空间和服务定义)1

    摘要Handle系统是一种通用的全局名称服务,它允许在公共互联网上进行安全的名称解析和管理。本文档提供了Handle系统名称空间及其数据、服务和操作模型的详细描

    深入研究win32结构化异常处理.doc

    本质上讲,Win32 结构化异常处理是操作系统提供的一种服务。编译器的运行时库对这种服务操作系统实现进行了封装,而所有能找到的介绍 SEH 的文档讲的都是针对某一特定编译器的运行时库。关键字 _try、_finally 和 _...

    SHE - Singular Handle-Edge-开源

    一种用于处理2D简单网格的拓扑数据结构(使用作者发布的Morse运算符)。 该数据结构是使用C ++实现的,它基于经典的Half-Edge。 该代码始于2002年,已在许多国家中使用。

    面向对象流包装的PHP库.zip

    &lt;?... namespace Streamer\Test; use Streamer\Stream; class StreamTest extends \PHPUnit_Framework_TestCase ...面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。

    经验总结用guide生成的不同GUI之间控件的互相操作-demo.rar

     从以上可以看出,handles结构其实是为用户提供了一种比较方便的在不同gui之间共享数据的方法。 以上纯属个人经验,如有错误,欢迎指正,先谢过。 以下为示例程序,免费提供给大家,欢迎大家提出宝贵意见...

    DA1458x RW内核 函数接口说明文档

    * 内核也提供了一种用于推迟行动事件功能 源码结构如下: ke_config.h 用来裁剪和设置kernel ke_env.c, .h 配置内核的环境变量 ke_event.c; .h 事件处理相关 ke_mem.c; .h 内存管理模块 ke_msg.c, .h 消息的创建处理...

    likecoin-button:每个赞都是一种奖励。 现在将您的“赞”转化为实际收入

    资料夹结构├── functions│ ├── dist # auto generated dist ver by babel│ ├── modules # aux helpers│ ├── nuxt # auto generated nuxt directory│ ├── ssrapp.js # handle nuxt SSR logic│ └...

    poolboy:用于管理资源声明和供应的运营商

    泳池男孩 Poolboy通过允许用户请求资源提供者和预先配置的资源池满足的资源,从而提供了一种管理OpenShift资源的结构。 这允许用户在集群中管理他们无法通过基于Kubernetes基于角色的访问控制直接访问的资源。泳池...

    sqlmap中文版本(和谐渗透小组专用)

    从缓冲区溢出说起,这样一种针对系统脆弱性的威胁,最根本的问题还是在于对于用户的输入没有进行检查。作为主要威胁之一的SQL注入带来了人们对于其应用和数据库的担忧。这个问题的出现有十年的时间了,但是现在仍旧...

    PE资源修复

    种类型的壳以及如何优化脱壳后的 PE 结构,那么你也就可能需要将修复后的资源节加载 在你认为更合适的 RVA 地址起始处。该功能接口能满足你的这个定制需要,由于该功能的 相对复杂性,要求使用者对 PE 结构必须...

    Delphi使用Ring0技术读写物理扇区.rar

    Delphi基于Ring0技术读写Windows系统下的硬盘物理扇区,磁盘读写操作一例,包括了VxD和仿CIH两种方法,VxD方法中还包括了所调用控件的VC 源代码,并且包括了一个测试的例子,运行效果如演示截图所示。相关的源代码...

    基于区块链的持久标识符系统

    本文基于区块链系统的分布式账本数据一致性, 提出了一种基于区块链的持久标识符系统, 在兼容现有标识符系统访问层的基础上, 提供存储层以保证标识符解析服务持久性及数据的长期正确保存. 基于Handle系统及 Hyper...

    内存管理内存管理内存管理

    (映射是一个表示一一对应关系的数学术语 —— 当内存的虚拟地址有一个对应的物理地址来存储内存内容时,该内存将被映射。) 基于 UNIX 的系统有两个可映射到附加内存中的基本系统调用: brk:brk() 是一个非常...

    vld(Visual Leak Detector 内存泄露检测工具 源码)

    Visual Leak Detector使用了一种方法来获得当前的程序计数器。首先,它调用一个函数,则这个函数的返回地址就是当前的程序计数器,而函数的返回地址可以很容易的从堆栈中拿到。下面是Visual Leak Detector获得当前...

    wireshark源码

    在这一步我们需要构建一组帮助解析的表结构。这需要对"proto_register_rdp"函数做些修改。首先定义一组静态数组。 例5 定义数据结构 static hf_register_info hf[]= { { &hf;_rdp_version, { "TPKT Header:Version",...

    中文API支持库(1.0-0

    _取可执行文件类型() 判断指定文件是哪一种类型的可执行文件。返回值非零表示成功,零表示失败。 _取压缩文件尺寸() 判断一个压缩文件在磁盘上实际占据的字节数。返回文件长度。&HFFFFFFFF表示出错。注意如...

    操作系统(内存管理)

    (映射是一个表示一一对应关系的数学术语 —— 当内存的虚拟地址有一个对应的物理地址来存储内存内容时,该内存将被映射。) 基于 UNIX 的系统有两个可映射到附加内存中的基本系统调用: brk: brk() 是一个非常...

    服务器概要设计说明.docx

    上面三种IO模型其实是一回事,都是类select模型,适合开发小型服务器或者客户端程序,而不适合需要接受成千上万连接的服务器程序。Overlapped I/O是异步IO模型,但是它需要程序员关心线程池的实现和调度〔类似Linux下面...

Global site tag (gtag.js) - Google Analytics