美文网首页
Effective Java

Effective Java

作者: DZQANN | 来源:发表于2022-04-01 22:49 被阅读0次

今天发现好像代码艺术也基本看完了,就重新翻开了Effective Java

静态工厂方法代替构造器

public class Demo {
  private final String field1;
  
  private Demo(String field1) {
    this.field1 = field1;
  }
  
  public static Demo of(String field1) {
    return new Demo(field1);
  }
}

静态工厂方法的几个优势:

  1. 有名称

    这个我觉得是静态工厂方法构造器的最大优势了。书中还列举了几个比较常用的名字

    • from:单个参数的时候用到

      Date d = Date.from(instant);
      
    • of:多个参数的时候使用,这个是我自己最常用的,不管几个参数都是of

    • getInstance/newInstance

    具体区别其实没有必要深究,意思也差不多

  2. 不必每次都会创建对象

    比如Boolean.parseBoolean(),只会返回Boolean类里面的常量

  3. 可以返回类型的任何子类型对象

构造器

构造器其实已经讨论过了。它适合用于构造函数的参数比较多的时候。

对于接口消息记录,我自己比较支持使用构造器。对于我自己,我每次需要的知识其中的几个方法,而且好像有一些是可以有默认值的。它的构造方法至少都是6,7个参数,这对于使用来说非常的麻烦,需要一个一个对字段。如果说多参数构造方法是为了保证必填字段都有值的话,可以在builde方法里面加校验,让测试跑不通过。甚至可以不加校验,如果真的有问题,使用过程中就会发现。

优先考虑依赖注入引用资源

就是如果一个service依赖了另外一个service,不要直接在class里面进行创建,应该将另外一个service作为构造方法的参数传入,这样可以使用到多态。

我们的代码里经常课件这种:

public class Service {
  
  private Dao dao;
  
  private Dao getDao() {
    if (this.dao == null) {
      this.dao = new Dao();
    }
    return this.dao;
  }
  
  public void process() {
    this.getDao();
    .....
  }
  
}

这种代码其实是比较想吐槽的,service本身是个单例,这么做其实不就是把明明不是单例的Dao变成了单例了。而且我比较反对,对于一个一定会被使用到的单例用饿汉式方法实现。

这里面还不如把Dao也变成Bean,然后Autowired

相关文章

网友评论

      本文标题:Effective Java

      本文链接:https://www.haomeiwen.com/subject/aopxsrtx.html