六個建立模式之簡單工廠模式(Simple Factory Pattern)

定義:
定義一個工廠類,它能夠根據參數的不一樣生成對應的類的實例;被建立的類的實例一般有相同的父類。由於該工廠方法嚐嚐是靜態的,因此又被稱爲靜態工廠方法(Static Factory Method)java

結構圖:
git

  • Factory:工廠類,工廠模式的核心。負責建立全部產品實例的內部邏輯,被外界直接調用,返回抽象類Product.
  • Product:抽象產品類,封裝了各類產品的公有方法,利於提升系統的可擴展性。
  • ConcreteProduct:具體產品類,工廠建立目標。繼承或實現了抽象產品類的抽象方法,含有具體產品功能的執行邏輯。

注意:github

  • 傳統狀況下客戶端會直接調用工廠類的靜態方法,並指定對應的參數。若是須要更改對應的產品,則須要從新變音。所以能夠考慮引入配置文件來指定具體產品類。
  • 有時爲了簡化,能夠將抽象產品類和工廠類合併,在抽象產品類中實現靜態工廠方法。

優勢:3d

  • 工廠類將對象的建立和使用分類開來,符合了單一職責原則。
  • 客戶端無序知道具體產品的類名,只須要知道具體產品類對應的參數便可,隱藏了具體產品建立的細節。
  • 經過配置文件,能夠在不修改客戶端代碼的狀況下更換和增長新的具體產品類。

缺點:對象

  • 工廠類集中了全部的具體產品建立的職責,一旦不能使用,整個系統將沒法使用。
  • 若是添加新類,則須要修改工廠類,當產品類型多時,不利於整個系統的擴展和維護。
  • 使用了靜態方法,形成工廠角色沒法造成基於繼承的等級結構。

適用場景:blog

  • 具體產品類的數目比較少,建立邏輯比較簡單。
  • 客戶端只須要知道傳入工廠的參數,對於如何建立對象並不關心。

實例:
繼承

SimpleFactoryPattern.javaget

相關文章
相關標籤/搜索