靜態工廠方法相比於構造器之優劣

  1. 什麼是靜態工廠方法?
    通常我們獲取類的實例是採用new,通過構造方法獲取一個實例。除此以外,我們還能夠用一個靜態方法來對外提供自身實例,即靜態工廠方法。

  2. 靜態工廠方法的優勢

    2.1 靜態工廠方法可以有自己的名稱
    構造方法與類同名,當出現多個重載的構造方法時區別僅在參數列表,用戶易於混淆。而靜態工廠方法可以爲不同的參數列表定義不同的名稱,突出不同靜態工廠方法之間的區別。

    2.2 不必每次調用時都創建一個新對象
    有時候外部調用者只需要拿到一個實例,而不關心是否是新的實例;又或者我們想對外提供一個單例時 —— 如果使用工廠方法,就可以很容易的在內部控制,防止創建不必要的對象,減少開銷。

    2.3 可以返回原返回類型的子類
    這使我們在選擇返回對象的類時有了更大的靈活性。尤其時對於基於接口的框架,Java8以後接口可以有靜態方法,那麼我們就可以直接通過接口來引用被返回的對象。

    2.4 所返回的對象的類可以隨着每次調用的變化而變化
    根據不同的參數值返回不同的結果,只要是聲明的返回類型的子類都可以,具體的實現過程不可見。這允許開發者後續對類的實現進行修改而不造成負面結果。

    2.5 方法返回的對象所屬類,在編寫該靜態方法時可以不存在。
    這種靈活的特性構成了服務提供者框架的基礎。

  3. 靜態工廠方法的缺點
    如果一個類不含有公共或被保護的構造器,就不能被子類化。此外,相比於構造器,靜態工廠方法在API文檔中沒有明確標識,不易被程序員所察覺。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章