工厂方法是一个能够返回实例对象的静态方法,在JDK中有以下几个例子使用到:
LogManager.getLogManager
Pattern.compile
Calendar.getInstance
工厂方法的好处:
1.具有名字,使得代码更优雅,不像构造器。
2.不一定每次都产生一个新的对象,如果必要的话,原来的对象可以被存储。
3.可以返回定义类型的子类对象。尤其是可以返回实现了定义接口但对调用者来说未知 的一个类(这个类implements 一个interface,但是个什么样的类,对调用者来说是未知的)。因此,框架往往用interface来作为工厂方法的返回类型。
一般的方法名称为,getInstance 和 valueOf。
Example:
public final class ComplexNumber { private float fReal; private float fImaginary; /** * Static factory method returns an object of this class. */ public static ComplexNumber valueOf(float aReal, float aImaginary) { return new ComplexNumber(aReal, aImaginary); } /** * Caller cannot see this private constructor. * * The only way to build a ComplexNumber is by calling the static * factory method. */ private ComplexNumber(float aReal, float aImaginary) { fReal = aReal; fImaginary = aImaginary; } //..elided }