优点
1、有名称可以通过方法名自注释
2、可复用这个讲一个例子,单例
3、返回值协变可以让这个返回更优雅从容(协变是指你可以返回应该返回的类型的子类,输入的参数同理)
4、更简洁利用静态工厂方法隐藏了二次提供参数,如下:
Map<String, List<String>> m = new ConcurrentHashMap<String, List<String>>();
可以写成这样:
Map<String, List<String>> m = ConcurrentHashMap.newConcurrentHashMapInstance();
public static <K, V> ConcurrentHashMap<K, V> newConcurrentHashMapInstance() {
return new ConcurrentHashMap<K, V>();
}
缺点
a、不能被子类化 就是说你这个实现了很多静态方法的类,如果是私有的就不能被子类化,感觉这是废话?大部分静态方法的工厂类都是私有的构造函数。
b、不明显 静态工厂方法和其他静态方法实际上没有任何区别,在API文档中也没有特别标出。
valueOf
of
getInstance
newInstance
getType
newType