优点:
1.静态工厂方法有名称(使代码更加容易阅读)。
例:
BigInteger.probablePrime(int, Random).
2.不必再每次调用的时候都创建一个新对象。
例:
public static Boolean valueOf(boolean flag)
{
return flag ? TRUE : FALSE;
}
public static final Boolean TRUE = new Boolean(true);
public static final Boolean FALSE = new Boolean(false);
3.可以返回原返回类型的任何子类型的对象。
4.创建参数化类实例的时候,是代码变得更加简洁。
例:类型推导
Map<String, List<String>> m = new HashMap<String, List<String>>();//未使用静态工厂方法
public static <K, V> HashMap<K, V> newInstance() {
return new HashMap<K, V>();
}
Map<String, List<String>> m = HashMap.newInstance(); //使用静态工厂方法,代码简洁许多。
缺点:
- 类如果不含公有的或者受保护的构造器,就不能被子类化。
类A继承类B时,类B必须提供非私有可用的构造器。 - 与其他静态方法实际上没有什么区别。