1. 程式人生 > >讀書筆記-《Effective Java》第1條:考慮用靜態工廠方法代替構造器

讀書筆記-《Effective Java》第1條:考慮用靜態工廠方法代替構造器

優勢

  • 它們有名稱

   構造器沒有名稱, 當一個類有多個構造器的時候就不容易分清楚哪個是自己想要的。

  • 不必在每次呼叫它們的時候都建立一個新物件

如果新建立的物件的成員屬性是可以重用的, 那麼可以先把第一次建立的物件儲存起來,以後想用的時候就不用建立新的物件了。就是Singleton、例項受控的類。也可以控制物件例項的生死。因為多次呼叫返回統一例項的原因,要判斷兩個引用是否為一個物件,那麼就可以用==判斷,可以提高效率。

  • 它們可以返回原返回型別的任何子型別的物件
  • 在建立引數化型別例項的時候,它們使程式碼變得更加簡潔

構造器上不能使用型別推導。可以看看 Lists.newArrayList()和Maps.newHashMap()方法的實現。

缺點

  • 類如果不含共有的或者受保護的構造器,就不能被子類化

當使用靜態工廠方法建立物件時,一般都會把構造器私有化。就會導致類不能被繼承。

  • 它們與其他的靜態方法實際上沒有任何區別

​​​​​​​所以注意給方法起個好名,變數名、類名也是如此。不能瞎求寫。