最近看到了这样一篇博客,感觉写的很好。尤其是它其中叙述的这种基于事件的模型。
博客地址: 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是空的,也就什么都不执行了。