獲取類的實例有兩種方法:框架
1. 提供一個公有的構造器(最經常使用)。ide
2. 提供一個公有的靜態工廠方法(static factory method)。spa
// 靜態工廠方法示例 public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE; }
靜態工廠方法的優點:.net
1. 有名稱。當一個類須要多個帶有相同簽名(方法簽名 = 方法名 + 參數列表)的構造器時,就用靜態工廠方法代替構造器,而且慎重選擇名稱以便突出它們之間的區別。code
2. 沒必要每次調用它們的時候都建立一個新對象。對象
3. 能夠返回原返回類型的任何子類型的對象。blog
4. 在建立參數化類型實例的時候,使代碼變得更加簡潔。類型推導:好比HashMap<K,V>裏的K和V就是參數,若是參數一多,每次new的時候都要寫一遍,顯得冗長。get
靜態工廠方法的缺點:it
1. 類若是不含公有的或者受保護的構造器,就不能被子類化。io
2. 與其餘的靜態方法實際上沒有任何區別。
課外連接:服務提供者框架。有三個重要組件:
1. Service Interface:提供者實現。
2. Provider Registration API:註冊有哪些provider。
3. Service Access API:調用provider的service。
一個可選組件:Service Provider Interface。