静态工厂方法是一个类产生一个该类实例的静态方法,用于补充或取代类的构造器。
例如 Boolean 中有如下代码段,其中 valueOf 就是一个静态工厂方法。
//...
public static final Boolean TRUE = new Boolean(true);
public static final Boolean FALSE = new Boolean(false);
//...
public static Boolean valueOf(boolean b) {
return (b ? TRUE : FALSE);
}
注意,工厂模式中也有工厂方法,这和这里的静态工厂方法是不一样的。
使用静态工厂方法提供类的实例有以下一些优点。
1)静态工厂方法可以有不同于类名的名字,用户更容易从方法名猜测到其用途,例如 BigInteger 类中有一个静态工厂方法
public static BigInteger probablePrime(int bitLength, Random rnd){
//...
}
该方法为用户返回一个很可能是质数的大整数。
2) 如上述 Boolean 类的方法 valueOf 所表现的, 静态工厂方法不需要新生成一个类的实例,它只是返回一个类的实例,这种方式常常能够提供效率上的改善。静态工厂方法常应用于单例模式中(Effective Java 中推荐使用枚举类型实现单例),保证一个类只被实例化一次,其它地方需要该类的实例是,总是返回同一个实例。