原书摘录:

书名 Effective Java中文版(第2版) 章节 第二章第1条
作者 [美] 布洛克(Joshua Bloch) 页码 8

静态工厂方法的第二个缺点在于,它们与其他的静态方法实际上没有任何区别。

在API文档中,它们没有像构造器那样在API文档中明确标识出来,因此,对于提供了静态工厂方法而不是构造器的类来说,要想查明如何实例化一个类,这是非常困难的。 

Javadoc工具总有一天会注意到静态工厂方法。同时,你通过在类或者接口注释中关注静态工厂,并遵守标准的命名习惯,也可以弥补这一劣势。

下面是静态工厂方法的一些惯用名称 

  • valueOf——不太严格地讲,该方法返回的实例与它的参数具有相同的值。这样的静态工厂方法实际上是类型转换方法。

  • of——valueOf的一种更为简洁的替代,在 Enum set(见第32条)中使用并流行起来。

  • getInstance——返回的实例是通过方法的参数来描述的,但是不能够说与参数具有同样的值。对于 Singleton来说,该方法没有参数,并返回唯一的实例。

  • newInstance——像 getInstance一样,但 newInstance能够确保返回的每个实例都与所有其他实例不同。 

  • getType——像 getInstance-一样,但是在工厂方法处于不同的类中的时候使用。Type表示工厂方法所返回的对象类型。 

  • newType——像 newInstance一样,但是在工厂方法处于不同的类中的时候使用。Type表示工厂方法所返回的对象类型。简而言之,静态工厂方法和公有构造器都各有用处,我们需要理解它们各自的长处。静态工厂通常更加合适,因此切忌第一反应就是提供公有的构造器,而不先考虑静态工厂。

万人迷柯南先生的笔记

有很多时候想要创建一个对象时,发现不能new,这时候要马上考虑静态工厂方法,按照命名习惯尝试一下,很快就会找到解决方法。所以平时在写自己的类时也要遵循这个命名习惯。