对于一个类,要获取它的一个实例,通常的做法是提供一个公用的构造函数,然而还有另一种方法,我们称之为静态工厂方法,实质上也就是一个简单的静态方法,它返回一个类的实例。其实,静态工厂方法获取对象实例,我们并不陌生,我们来看看API中的一个实例:
首先注意 ,静态工厂方法与设计模式中的工厂方法模式是不同的。
下面是一个Boolean的中的实例
public final class Boolean implements java.io.Serializable, Comparable<Boolean>{
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);
}
}
类可以为其客户端提供静态工厂方法,而不是公共构造方法。但是既有优点,也有缺点。
第一个优点是,不像构造方法,它们是有名字的。 比如返回一个可能为素数的BigInteger的构造方法BigInteger(int, int, Random),可以被更好的命名为BigInteger.probablePrime的静态工厂方法。提高可读性。
第二个优点是,与构造方法不同,不需要每次都创建一个新对象,这个看看上方Boolean的代码示例就会明白
第三个优点是, 与构造方法不同,它们可以返回任意类型的任何子类型的对象