Java 的静态工厂方法

    1. 序:什么是静态工厂方法
    1. Effective Java
    • 2.1 静态工厂方法与构造器不同的第一优势在于,它们有名字
    • 2.2 第二个优势,不用每次被调用时都创建新对象
    • 2.3 第三个优势,可以返回原返回类型的子类
    • 2.4 第四个优势,在创建带泛型的实例时,能使代码变得简洁
    1. 除此之外
      3.1 可以有多个参数相同但名称不同的工厂方法
      3.2 可以减少对外暴露的属性
      3.3 多了一层控制,方便统一修改
    1. 总结

1. 序:什么是静态工厂方法

在 Java 中,获得一个类实例最简单的方法就是使用 new 关键字,通过构造函数来实现对象的创建。
就像这样:

    Fragment fragment = new MyFragment();
    // or
    Date date = new Date();

不过在实际的开发中,我们经常还会见到另外一种获取类实例的方法:

    Fragment fragment = MyFragment.newIntance();
    // or 
    Calendar calendar = Calendar.getInstance();
    // or 
    Integer number = Integer.valueOf("3");

↑ 像这样的:不通过 new,而是用一个静态方法来对外提供自身实例的方法,即为我们所说的静态工厂方法(Static factory method)

知识点:new 究竟做了什么?

简单来说:当我们使用 new 来构造一个新的类实例时,其实是告诉了 JVM 我需要一个新的实例。JVM 就会自动在内存中开辟一片空间,然后调用构造函数来初始化成员变量,最终把引用返回给调用方。

2. Effective Java

在关于 Java 中书籍中,《Effective Java》绝对是最负盛名几本的之一,在此书中,作者总结了几十条改善 Java 程序设计的金玉良言。其中开篇第一条就是『考虑使用静态工厂方法代替构造器』,关于其原因,作者总结了 4 条(第二版),我们先来逐个看一下。

2.1 静态工厂方法与构造器不同的第一优势在于,它们有名字

由于语言的特性,Java 的构造函数都是跟类名一样的。这导致的一个问题是构造函数的名称不够灵活,经常不能准确地描述返回值,在有多个重载的构造函数时尤甚,如果参数类型、数目又比较相似的话,那更是很容易出错。

比如,如下的一段代码 :

Date date0 = new Date();
Date date1 = new Date(0L);
Date date2 = new Date("0");
Date date3 = new Date(1,2,1);
Date date4 = new Date(1,2,1,1,1);
Date date5 = new Date(1,2,1,1,1,1);

你可能感兴趣的:(java,开发语言,后端,经验分享,程序人生)