天天看點

java系列_靜态工廠方法

觀看Effective java 中文版 第2版有感,不是很了解,是以上網上搜了一些資料,以下内容解釋的很通透,可以參考

java高效程式設計之靜态工廠方法代替構造函數

  一般為了獲得一個類的執行個體,我們最常用的方法就是提供一個或多個公有的構造函數,這個大家都了解,但是實際上還有另一種 建立對象的方法:靜态工廠方法

  比如java中為Boolean 類提供了如下靜态工廠方法代替構造函數:

  public static Boolean valueOf(boolean b){

  return (b Boolean.True:Boolean.FALSE);

  }

  使用Boolean.valueOf()方法就可以直接使用了

  那麼, new Boolean(aval).booleanValue() 和Boolean.valueOf(aval).booleanValue() 有什麼差別?

  它們之間差别在于new Boolean開辟了新的記憶體空間。從程式開發,記憶體角度來講,推薦直接用靜态方法(第二種),最起碼省記憶體呢。

  用靜态工廠方法代替公有的構造函數,是有好處,但也有他的不足之處.

  1、靜态工廠方法的一個好處是,和構造函數不同,靜态工廠方法具有名字。因為可以向外部調用時,由靜态方法名可以知道方法的用途。如果隻用構造函數,你可能永遠也記不住該用哪個構造函數,結果常常會調用錯誤的構造函數上,不可知道構造函數的作用。,除非去看類的文檔說明。

  2、靜态工廠方法的第二個好處是,與構造函數不同,它們每次被調用的時個,不要求非建立一個新的對象。比如上面的Boolean.valueOf()方法。如果一個程式頻繁地建立對象,并且建立對象的代價很昂貴,用靜态工廠方法可以極大的提高性能。單例模式就用了靜态工廠方法。

  3、靜态工廠方法的每三個好處是,與構造函數不同,它們可以傳回一個原傳回類型的子類的對象。

  4、靜态工廠方法的主要缺點是。類如果沒有公有的或都受保護的構造函數,就不能被了類化。如果類中為了不讓被執行個體化,隻提供私有構造函數,那麼此類不可繼承。不過這既是缺點也是優點吧!呵呵

  4、靜态工廠方法的第二個缺點是,它們與其他的靜态方法沒有差別。類中有用于生成類的執行個體的靜态工廠方法,也要其他功能的普通靜态方法,因為在使用時可能會區分不了那個是靜态工廠方法。這就要注意命名規範,使用調用者看名知意。将缺點減少到最小影響。 比如我經常用名到getInstance方法表示傳回一個唯一的執行個體。

  靜态工廠方法和公有構造函數都有各自的用途。用哪個要看實際情況,如果沒有其他因素影響你的選擇,那麼你最好還是老老實實的使用構造函數,畢竟它是java的規範。

以上解釋引用自: http://www.educity.cn/wenda/357386.html