優(yōu)點(diǎn):
1.靜態(tài)工廠方法有名稱(使代碼更加容易閱讀)。
例:
BigInteger.probablePrime(int, Random).
2.不必再每次調(diào)用的時候都創(chuàng)建一個新對象。
例:
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.創(chuàng)建參數(shù)化類實(shí)例的時候,是代碼變得更加簡潔。
例:類型推導(dǎo)
Map<String, List<String>> m = new HashMap<String, List<String>>();//未使用靜態(tài)工廠方法
public static <K, V> HashMap<K, V> newInstance() {
return new HashMap<K, V>();
}
Map<String, List<String>> m = HashMap.newInstance(); //使用靜態(tài)工廠方法,代碼簡潔許多。
缺點(diǎn):
- 類如果不含公有的或者受保護(hù)的構(gòu)造器,就不能被子類化。
類A繼承類B時,類B必須提供非私有可用的構(gòu)造器。 - 與其他靜態(tài)方法實(shí)際上沒有什么區(qū)別。