工具类、静态方法、单例

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

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<String, Object> 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去封装;一方面是扩展的问题,比如要拦截指定对象的删除方法,这个对于静态方法怎么拦截呢?


转载于:https://my.oschina.net/scipio/blog/170669

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值