对于一个类,为了获得它的一个实例,最通常的方法就是提供一个公有的构造方法。实际上我们还可以使用公用的静态工厂方法。所谓静态工厂方法,实际上就是一个简单的静态方法,它返回的是类的一个实例。
例子:
public static Boolean valueOf(boolean b){
return (b ? Boolean.true : Boolean.false);
}
这个是把boolean值转换为一个Boolean对象的引用。
用静态工厂方法来代替构造方法,既有好处,也有不足之处。下面我们就来看下静态工厂方法的优点:
-
与构造函数相比,它具有名字。
-
它每次被调用的时候,不要求创建一个新的对象。
-
它可以返回原返回类型的子类型的对象,这样就增加了返回对象类型的灵活性。
静态工厂方法的缺点:
-
如果一个类是通过静态工厂方法来取得实例的,并且该类的构造函数都不是公有的,那该类就不可能有子类(被继承),子类的构造函数需要首先调用父类的构造函数,因为父类的构造函数是private的,所以即使我们继承成功的话,那么子类也根本没有权限去调用父类的私有构造函数,所以是无法被继承的。
-
静态工厂方法与其他的静态方法没有任何的区别,导致无法辨别那个静态方法是用来创建实例的。
总结:
静态工厂方法和公有的构造方法都有它们各自的用途,我们需要理解各自的长处。适时的判断是使用静态工厂方法还是构造方法。