处理器注册与定义分离
问题
看过相关教程后,我们肯定对JavaFX在事件处理上,介绍的lambda表达式以及内部类简洁用法印象深刻。但细想后其仍有很大的局限性。
局限一:不适用与团队开发
UI程序员与功能开发程序员协作起来困难重重,因为功能开发程序员的对handler功能的每一次修改或扩展,都需要UI程序员对handler注册位置的代码进行同步修改。
局限二:不适用对于复杂性高的handler不适用
因为lambda表达式要求,匿名对象只有一个方法,因此要把handler所需要的所有处理全部放进一个方法中,这使得handler中不同子模块的耦合性增大,可读性降低,可重用性直接没有。(对于子模块的重用,java没有局部方法变量这么一说;而对于整个handler的重用,因为是创建的是匿名对象,所以没办法在其他地方再次获得。)
解决方法
对于解决局限一,需要用外部类,在新文件中按部就班地定义实现了EventHandler<EventType>接口的新类,然后在需要它的文件中import再创建新对象调用。
对于解决局限二,则不能用lambda表达式,需要用类来为不同子模块定义不同方法。
总结
在handler不是特别简单或者需要可扩展性和可重用性的情况下,请把事件处理器handler的注册与其定义分离在不同的文件中进行