java工具类编写思考

初衷

这篇博客的初衷是因为我想写一个工具类,同时对工具类做出一些规范以及优化。

规范

  1. 工具类定义为final class,考虑到工具类应该不能被继承
  2. 工具类的命名应该用Util结尾,例如LogUtil
  3. 工具类的构造方法应该首选是private的,同时工具类的工具方法为static
  4. 工具类使用单例模式,或者static初始化某个单例。这个规范是因工具的不同而不同的,例如我要写一个gson的工具类,不应该在每个方法里都new Gson()再进行操作,如果一个类大量调用GsonUtil,那就会大量创建gson对象。

针对第四种,给点示例代码,首先是静态块初始化方式:

public final class GsonUtil {


private static Gson gson = null;
    static {
        if (gson == null) {
            gson = new Gson();
        }
    }


    private GsonUtil() {
    }
 }

然后是单例模式初始化方式:

public final class GsonUtil{
    private static volatile Gson gson;
    private static Gson initInstance(){
        if(gson == null){
            synchronized(GsonUtil){
                if(gson == null){
                    gson = new Gson();     
                }
            }
        }
    }
    private GsonUtil() {
        initInstance();
    }
}

拓展

上面是我自己思考的,然后我又看了一些其他资料,主要是说:

编写工具类俩种方式:

一:

1.工具方法都设为非static方法

2.将工具类设计为单列模式

3.注意这种方式需要获取工具类对象(实例化)才能调用方法

二:

1.工具方法设计为static方法

2.工具 类所有构造方法都设计为private修饰

3.工具类本身以abstract修饰(目的就是只能用类调用方法,不能实例化)

说静态类好的:

静态类不用引用就能调用,而单例需要有对象的引用,因此节约资源(我觉得这个影响微乎其微,可以忽略)
静态类方便,随处可用;而单例必须有引用,需要注入或者new(是有点麻烦,我上次写静态类也是因为这个原因)

说单例好的:

单例模式的类是普通的类,它具有面向对象的特性,方便扩展
对于有配置的工具类,可以轻松的创建多个不同配置的单例对象(想起我主导的另一个项目就存在5-6个redis数据源,如果使用静态类就是灾难)

因此,得出以下结论:

如果没有配置信息的工具类,当然是静态类好,随处调用,不需引用爽得不要不要的。比如Math.abs(),如果写个单例,可能全世界都要笑话你了。
如果有配置信息的工具类,最好还是使用单例模式吧,这样以后如果有多个数据源,你会感谢你自己。

区别

我在静态方法里使用的单例模式,不是指的是我的工具类作为单例,而是第三方的类。

如有错误请指正。

  • 15
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值