上一篇blog中将工具类写成了静态类(所有的方法都是静态方法),今天发现了这种方式的弊端。且听我慢慢道来:
今天需要重构一个实习生的代码,逻辑很简单,消费kafka,提取需要的内容写入ssdb,他将配置信息直接写到了项目中,而我们需要区分本地、测试、生产环境,不现实,这就是重构的原因。
这就要求我必须封装kafka消费、jedis(ssdb兼容jedis)读写工具类。本来打算照着前几天的做,但是想着参照参照大牛的代码,学习学习提升自己。
打开大牛的代码,发现所有类似的工具类都是非静态的,而是spring注入(默认是单例模式)那么问题来了:工具类用单例模式还是静态类好?
于是又是上网搜,最后通过知乎、博客等途径,主要了解了一下区别:
说静态类好的:
静态类不用引用就能调用,而单例需要有对象的引用,因此节约资源(我觉得这个影响微乎其微,可以忽略)
静态类方便,随处可用;而单例必须有引用,需要注入或者new(是有点麻烦,我上次写静态类也是因为这个原因)
说单例好的:
单例模式的类是普通的类,它具有面向对象的特性,方便扩展
对于有配置的工具类,可以轻松的创建多个不同配置的单例对象(想起我主导的另一个项目就存在5-6个redis数据源,如果使用静态类就是灾难)
因此,我得出以下结论:
如果没有配置信息的工具类,当然是静态类好,随处调用,不需引用爽得不要不要的。比如Math.abs(),如