悠然乱弹:从几个方法的重构讲开去--性能大优化

上一篇讲到通过上面两篇的优化与重构,总体来讲,前面提到的问题,除了性能问题以外,其它问题都已经顺利的解决了。 java

如今还存在屡次扫描处理的问题,也就是说虽然代码结构性重构是成功的,可是性能问题仍是没有根本解决。 程序员

在给出解决方案以前,须要对这个处理方式缕一缕: 性能

处理方式1:每次遍历全路径找到待处理文件,文件而后批量进行处理。优势是处理起来比较简单,可是会重复扫描。 优化

处理方式2:一次遍历全部文件,而后对每一个文件进行注解检测。扫描全路径只有一次,而后要把每一个文件与过滤器进行比较若是比较成功那就作,比较不成功就不作。 spa

稍加分析就会发现,两种方式的比较次数是同样的,可是第二种方案遍历文件的次数就少到极限了,还能比1次更少么?? .net

此次的作法就有点复杂了(相对的,实际上也很简单),作一个过滤器,里面放个Map存储过滤器:处理器。 code

对于每一个一个文件,都对全部的过滤器进行校验,若是校验成功,就执行对应的处理器。 blog

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;
    }
}

呵呵,性能的问题也提高完毕了。 开发

至此,从几个看似重复的方法,咱们经过层层分析,细致推理,终于找到了内部的复杂关系,经过重构,给程序员以便捷的开发与扩展,给使用者以高效的性能和一目了然的逻辑,皆大欢喜了。 get

总结:许多的时候,一些纠结,重复,无从动手,都是有其内在的复杂因素的,之因此剪不断理还乱,是由于没有抓住实质,但只要把它理顺了,其实各干干的,就简单了。

相关文章
相关标签/搜索