Java常用設計模式之工廠方法模式

林花鹿發表於2018-06-21

什麼是工廠方法模式

工廠方法模式,定義一個用於建立物件的介面,讓子類決定例項化哪一個類。工廠方法使一個類的例項化延遲到其子類,是簡單工廠模式的進一步抽象和推廣。

工廠方法模式的層次結構

  • 抽象產品角色:具體產品角色的抽象類,包含了具體產品物件的公共方法,如下圖的Car。
  • 具體產品角色:客戶端使用工廠類所生成的最終目標的物件,如下圖的Car1、Car2。
  • 抽象工廠角色:是工廠方法的核心,具體工廠角色的抽象類,其中得到具體產品物件的功能變成其子類來實現,如下圖的Factory。
  • 具體工廠角色:根據需求實現抽象工廠角色,生成對應的具體產品角色,如下圖的CarFactory1、CarFactory2。
    工廠方法模式圖解

工廠方法模式的優缺點

優點

不僅保持了簡單工廠模式的優點,也克服了簡單工廠模式的開放-封閉原則 (這裡不理解的可以看我的《Java常用設計模式之簡單工廠模式》)

缺點

每增加一個具體角色,都要新增一個產品工廠的類,增加開發的程式碼量

例項

抽象工廠角色:

抽象工廠角色
具體工廠角色:
具體工廠角色
抽象產品角色:
抽象產品角色
具體產品角色:
具體產品角色
客戶端:
客戶端
從例項中,我們再看工廠方法模式的優缺點:

  • 優點:這裡不用像簡單工廠模式中要對具體工廠類進行修改,而是將簡單工廠的內部邏輯判斷移到了客戶端程式碼來進行,即如果我們加新功能,本來是修改工廠類程式碼,現在修改客戶端程式碼,如上圖我們只要在客戶端修改,就可以進行不同具體產品的生成
Factory factory=new CarFactory1();
===>變成
Factory factory=new CarFactory2();
複製程式碼
  • 缺點:要新增一個具體工廠物件和一個具體產品物件,增加開發程式碼量

如果有什麼疑問或者錯誤,歡迎指出或討論,謝謝

參考資料:

  • 《大話設計模式》

相關文章