什麼是工廠方法模式
工廠方法模式,定義一個用於建立物件的介面,讓子類決定例項化哪一個類。工廠方法使一個類的例項化延遲到其子類,是簡單工廠模式的進一步抽象和推廣。
工廠方法模式的層次結構
- 抽象產品角色:具體產品角色的抽象類,包含了具體產品物件的公共方法,如下圖的Car。
- 具體產品角色:客戶端使用工廠類所生成的最終目標的物件,如下圖的Car1、Car2。
- 抽象工廠角色:是工廠方法的核心,具體工廠角色的抽象類,其中得到具體產品物件的功能變成其子類來實現,如下圖的Factory。
- 具體工廠角色:根據需求實現抽象工廠角色,生成對應的具體產品角色,如下圖的CarFactory1、CarFactory2。
工廠方法模式的優缺點
優點
不僅保持了簡單工廠模式的優點,也克服了簡單工廠模式的開放-封閉原則 (這裡不理解的可以看我的《Java常用設計模式之簡單工廠模式》)
缺點
每增加一個具體角色,都要新增一個產品工廠的類,增加開發的程式碼量
例項
抽象工廠角色:





- 優點:這裡不用像簡單工廠模式中要對具體工廠類進行修改,而是將簡單工廠的內部邏輯判斷移到了客戶端程式碼來進行,即如果我們加新功能,本來是修改工廠類程式碼,現在修改客戶端程式碼,如上圖我們只要在客戶端修改,就可以進行不同具體產品的生成
Factory factory=new CarFactory1();
===>變成
Factory factory=new CarFactory2();
複製程式碼
- 缺點:要新增一個具體工廠物件和一個具體產品物件,增加開發程式碼量
如果有什麼疑問或者錯誤,歡迎指出或討論,謝謝
參考資料:
- 《大話設計模式》