考慮用靜態工廠方法替代構造器(1)

一、java語言支持四種類型:java

(1)接口(interface):設計模式

(2)類(class):數組

(3)數組(Array):緩存

(4)基本類型(primitive):惟一非引用類型(reference type)框架

二、方法簽名:包括方法名稱、參數,不包括返回值;設計

《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《對象

三、本條靜態工廠方法與設計模式的工廠方法不是對應等價的;繼承

  • 該靜態方法將boolean基本類型值轉換成Boolean對象引用
  • 類能夠經過靜態工廠方法提供他的客戶端,而不是構造器

四、靜態工廠方法比構造器優點接口

(1)第一大優點:有名稱:it

  • 構造器參數沒有確切描述返回的對象,有名稱的靜態工廠更容易使用,易於閱讀;
  • 當須要帶有相同簽名的構造器時,使用靜態工廠代替構造器,使用名稱區別他們;

(2)沒必要每次調用的時候建立一個新對象:

  • 不可變類 (見15條)使用預先建立好的實例(緩存建立實例)進行重複利用
  • 不可變類:實例不可被修改類
  • 避免沒必要要建立重複對象;
  • 實例受控的類 靜態工廠能爲重複調用返回相同對象
  • 有助於嚴格控制某時刻,哪些實例應該存在
  • 能夠確保是一個Singleton或者是不可實例化的
  • 不可變類能夠確保不會存在兩個相等的實例

(3)靜態工廠方法能夠返回原返回類型的任意子類型,更加靈活

  • API返回對象,對象的類又不會變成公有
  • 適用於基於接口的框架
  • 基於接口的框架,包含靜態工廠方法不可實現類
  • Collection FrameWork集合接口有32個實現,採用上述方法(不可實例化類Collections導出)
  • Collections API導出比32個獨立公有導出,實現起來小得多
  • API數量少,概念意義也少

靜態工廠方法返回的對象所屬的類,在編寫工廠方法是能夠不存在

  • 服務提供者框架的基礎:如JDBC
  • 服務提供者框架:多個服務提供者實現一個服務,系統爲客戶端提供多個實現,並使之解耦

服務提供者框架:

  • 組件1服務接口:提供者實現
  • 組件2提供者註冊API:系統用來註冊實現的
  • 3服務訪問API:客戶端用來獲取服務實例的
  • 4服務提供者接口(可選):提供者建立服務實例;若無,反射實例化便可

服務提供者能夠有無數變種

  • 服務訪問API能夠利用適配器,返回更加豐富服務接口

(4)第四大優點:建立參數化類型實例,代碼更加簡介

五、靜態工廠方法主要缺點一:

  • 類沒有公有或受保護構造器,不能被子類化
  • 這樣鼓勵程序使用組合,不是繼承<16條>

六、缺點二:與其餘的靜態方法沒有任何區別

相關文章
相關標籤/搜索