工廠模式--工廠方法模式
阿新 • • 發佈:2021-11-28
工廠方法模式就是熟悉的工廠模式
在工廠方法模式中:
不再提供一個統一的工廠來建立所有的產品物件,而是針對不同的產品提供不同的工廠,系統提供給一個與產品等級結構對應的工廠等級結構。
定義:定義一個用於建立物件的介面,讓子類決定將哪一個類例項化。工廠方法模式讓一個類的例項化延遲到其子類。工廠方法模式又簡稱為工廠模式(Factory Pattern),又可稱作虛擬構造器模式(Virtual Constructor Pattern)或多型工廠模式(Polymorphic Factory Pattern)。工廠方法模式是一種類建立型模式。
通俗來講:
工廠方法模式提供一個抽象工廠介面來宣告抽象工廠方法,而由其子類來具體實現工廠方法,建立具體的產品物件。
基本流程:
- Factory
抽象工廠中聲明瞭工廠方法但並未實現工廠方法,交給其子類負責。
interface Factory {
public Product factoryMethod();
}
- ConcreteFactory
在實際使用時,具體工廠類在實現工廠方法時除了建立具體產品物件之外,還可以負責產品物件的初始化工作以及一些資源和環境配置工作,例如連線資料庫、建立檔案等
class ConcreteFactory implements Factory { public Product factoryMethod() { // 可以做一些初始化工組 return new ConcreteProduct(); } }
使用反射建立工廠物件
此時新增新的產品只需要:
- 繼承抽象產品類
- 對應增加一個新的具體日誌記錄工廠,繼承抽象工廠
- 修改配置檔案
- 編譯新增的具體產品類和具體工廠類,對原有的類庫程式碼無須做任何的修改
適用場景:
(1) 客戶端不知道它所需要的物件的類。在工廠方法模式中,客戶端不需要知道具體產品類的類名,只需要知道所對應的工廠即可,具體的產品物件由具體工廠類建立,可將具體工廠類的類名儲存在配置檔案或資料庫中。
(2) 抽象工廠類通過其子類來指定建立哪個物件。在工廠方法模式中,對於抽象工廠類只需要提供一個建立產品的介面,而由其子類來確定具體要建立的物件,利用面向物件的多型性和里氏代換原則,在程式執行時,子類物件將覆蓋父類物件,從而使得系統更容易擴充套件。
不足:
工廠方法模式中的每個工廠只能生產一類產品,可能導致系統中存在大量的工廠類,勢必會增加系統的開銷,類的個數成對增加,增加系統的維護成本和執行開銷。
參考作者:劉偉 http://blog.csdn.net/lovelion