1. 程式人生 > 其它 >工廠模式--工廠方法模式

工廠模式--工廠方法模式

工廠方法模式就是熟悉的工廠模式

在工廠方法模式中
不再提供一個統一的工廠來建立所有的產品物件,而是針對不同的產品提供不同的工廠,系統提供給一個與產品等級結構對應的工廠等級結構。

定義:定義一個用於建立物件的介面,讓子類決定將哪一個類例項化。工廠方法模式讓一個類的例項化延遲到其子類。工廠方法模式又簡稱為工廠模式(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