2011年6月25日 星期六

Effective Java 讀書筆記: Item 1 - static factory method

記錄讀書心得, 內容不一定和書上一致, 有些是我自己的看法。

相對來說, static factory method 對於 constructor 有下列好處:

  • 有名字, 語意較清楚
  • 不一定要生成新物件, 可做到 singleton 或配合 immutable 的特性做 object pool, 或是確保不會生成兩個同樣內容的 immutable 物件, 這樣就能用 == 比較而不用 equals, 效率快很多
  • 有彈性生成 subtype
  • 可避開 constructor 語法限制, 像是可以有多個使用 vararg 的「constructor」

壞處則是:

  • 失去繼承的效果
  • 無法從 java doc 或原始碼裡清楚看出那些 static method 是 factory method

第一點的壞處沒那麼嚴重, 換個角度想, 可以減少濫用繼承的機會 (favor composition over inheritance); 第二點可透過 name convention 降低影響, 像是使用 newInstance (表示生成新物件), getInstance (表示取得物件, 常用於 singleton), valueOf (表示取得和傳入物件「等值」的物件)。

沒有留言:

張貼留言

在 Fedora 下裝 id-utils

Fedora 似乎因為執行檔撞名,而沒有提供 id-utils 的套件 ,但這是使用 gj 的必要套件,只好自己編。從官網抓好 tarball ,解開來編譯 (./configure && make)就是了。 但編譯後會遇到錯誤: ./stdio.h:10...