本文共 884 字,大约阅读时间需要 2 分钟。
现在还存在多次扫描处理的问题,也就是说虽然代码结构性重构是成功的,但是性能问题还是没有根本解决。
在给出解决方案之前,需要对这个处理方式缕一缕:
处理方式1:每次遍历全路径找到待处理文件,文件然后批量进行处理。优点是处理起来比较简单,但是会重复扫描。
处理方式2:一次遍历所有文件,然后对每个文件进行注解检测。扫描全路径只有一次,然后要把每个文件与过滤器进行比较如果比较成功那就做,比较不成功就不做。
稍加分析就会发现,两种方式的比较次数是一样的,但是第二种方案遍历文件的次数就少到极限了,还能比1次更少么??
这次的做法就有点复杂了(相对的,实际上也很简单),做一个过滤器,里面放个Map存储过滤器:处理器。
对于每个一个文件,都对所有的过滤器进行校验,如果校验成功,就执行对应的处理器。
1 2 3 4 5 6 7 8 9 10 11 | public class ComplexFileFilter implements FileObjectFilter { Map<FileObjectFilter,FileObjectProcessor> filterProcessorMap; public boolean accept(FileObject fileObject) { for (FileObjectFilter filter:filterProcessorMap.keySet()){ if (filter.accept(fileObject)){ filterProcessorMap.get(filter).process(fileObject); } } return false ; } } |
呵呵,性能的问题也提升完毕了。
至此,从几个看似重复的方法,我们通过层层分析,细致推理,终于找到了内部的复杂关系,通过重构,给程序员以便捷的开发与扩展,给使用者以高效的性能和一目了然的逻辑,皆大欢喜了。
总结:许多的时候,一些纠结,重复,无从动手,都是有其内在的复杂因素的,之所以剪不断理还乱,是因为没有抓住实质,但只要把它理顺了,其实各干干的,就简单了。
转载地址:http://qbdux.baihongyu.com/