java工具类静态方法和单例_工具类、静态方法、单例

一般情况下,我们看到的工具类的实现,大多用静态方法。

scala里面去除了静态方法,采用object的单例模式替代。

有几个问题:

1、工具类为什么一般用静态方法?

工具类一般是做工具用,没有自己的属性成员,也不建议在工具类里面使用属性,这样容易出现线程安全问题。

2、单例模式的使用场景

单例的出现是为了解决系统因为多次new实例造成资源的消耗,比如读取配置文件,每次实例化一次,就读取一次文件,这样消耗太大,因而一般启动时读取一次,以后每次都用这个单例获取键值对。

spring中的dao和service都是单例形式,对于数据库连接采用threadlocal,这样一方面避免线程不安全问题,一方面也方便事务的控制,比如事务嵌套、传播等。

3、scala的object分离静态方法和实例方法

scala的class和object在Java层面里面合二为一,class里面的成员成了实例成员,object成员/方法成了static成员/方法。scala这样其实是分离了静态方法和势力方法。

4、使用静态方法还是封装对象

大量使用静态方法有种脚本和面向过程的感觉,这样有没有什么坏处了,可能造成方法重用、扩展问题。

比如,对于数据库增删改查操作,有的就这样设计:

@Bean

public class UserServiceImpl extends BaseService implements UserService {

@Override

public User login(Map fieldMap) {

String username = String.valueOf(fieldMap.get("username"));

String password = String.valueOf(fieldMap.get("password"));

return DataSet.select(User.class, "username = ? and password = ?", username, password);

}

}    设计成了静态方法。

一般面向对象的设计是,抽出来为一个base dao,由所有entity去继承。这有什么好处了,一方面是方面方法的重用,上面那种方法sql写多了,不大容易重用,因为写起来太容易了,根本不用dao去封装;一方面是扩展的问题,比如要拦截指定对象的删除方法,这个对于静态方法怎么拦截呢?

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值