属于 “创建和销毁对象” 那章。静态工厂方法跟“四人帮”设计模式里面的工厂方法模式是不同的。

静态工厂方法不一定每次都创建新实例。有点类似享元模式(Flyweight pattern)。如果创建对象代价比较大,使用静态工厂方法可以提高性能。这种类被称为实例受控(instance-controlled)类。可以确保单例(singleton)或不被实例化。还有让值不可变类(immutable value class)保存没有两个相等的实例存在。

可返回任意子类的对象。

静态工厂方法返回的对象可以因调用参数不同而不同。

只提供私有静态工厂方法(没有 public 或 protected 构造器)的类不能被继承(派生),不过有时候是好事,因为鼓励使用组合而不是继承。

比较难找,因为不想构造器那样出现在 java doc。

一些静态工厂方法的例子:

from —— 一种类型转换方法,取一个参数并返回此类型对应的实例,例如:

of —— 一种聚集方法,取多个参数,返回此类型的实例,整合了这些参数的值,例如:

通常使用静态工厂方法更好,所以可以考虑一下,而不是只想到公有构造器。