設計模式:學習筆記(14)——工廠方法模式

設計模式:學習筆記(14)——工廠方法模式

理解

  在簡單工廠模式中只有一個工廠類,該工廠類處於對產品類進行實例化的中心位置,它需要知道每一個產品類的實現細節,並決定何時實例化哪一個產品類。簡單工廠模式最大的缺點就是當有新產品要加入系統中時,必須修改工廠類,需要在其中加入必要的業務邏輯,這違背了開閉原則此外,在簡單工廠模式中,所有的產品都由同一個工廠創建,工廠類職 責較重,業務邏輯較爲複雜,具體產品與工廠類之間的耦合度高,嚴重影響了系統的靈活性 和擴展性,而工廠方法模式則可以很好地解決這一問題。

  工廠方法模式中,我們不再提供一個統一的工廠類來創建所有的產品對象,而是針對不同的產品提供不同的工廠,系統提供一個與產品等級結構對應的工廠等級結構

  工廠方法模式(Factory Method Pattern):定義一個用於創建對象的接口,讓子類決定將哪一個 類實例化。工廠方法模式讓一個類的實例化延遲到其子類。工廠方法模式又簡稱爲工廠模式 (Factory Pattern),又可稱作虛擬構造器模式(Virtual Constructor Pattern)或多態工廠模式 (Polymorphic Factory Pattern)。工廠方法模式是一種類創建型模式。

  

 

實例

//日誌記錄器接口:抽象產品  
interface Logger {  
    public void writeLog();  
}  

//數據庫日誌記錄器:具體產品  
class DatabaseLogger implements Logger {  
    public void writeLog() {  
        System.out.println("數據庫日誌記錄。");  
    }  
}  

//文件日誌記錄器:具體產品  
class FileLogger implements Logger {  
    public void writeLog() {  
        System.out.println("文件日誌記錄。");  
    }  
}  

//日誌記錄器工廠接口:抽象工廠  
interface LoggerFactory {  
    public Logger createLogger();  
}  

//數據庫日誌記錄器工廠類:具體工廠  
class DatabaseLoggerFactory implements LoggerFactory {  
    public Logger createLogger() {  
            //連接數據庫,代碼省略  
            //創建數據庫日誌記錄器對象  
            Logger logger = new DatabaseLogger();   
            //初始化數據庫日誌記錄器,代碼省略  
            return logger;  
    }     
}  

//文件日誌記錄器工廠類:具體工廠  
class FileLoggerFactory implements LoggerFactory {  
    public Logger createLogger() {  
            //創建文件日誌記錄器對象  
            Logger logger = new FileLogger();   
            //創建文件,代碼省略  
            return logger;  
    }     
}

class Client {  
    public static void main(String args[]) {  
        LoggerFactory factory;  
        Logger logger;  
        factory = new FileLoggerFactory(); //可引入配置文件實現  
        logger = factory.createLogger();  
        logger.writeLog();  
    }  
}

模式分析

 工廠方法模式的主要優點如下:

(1) 在工廠方法模式中,工廠方法用來創建客戶所需要的產品,同時還向客戶隱藏了哪種具體 產品類將被實例化這一細節,用戶只需要關心所需產品對應的工廠,無須關心創建細節,甚 至無須知道具體產品類的類名。

(2) 基於工廠角色和產品角色的多態性設計是工廠方法模式的關鍵。它能夠讓工廠可以自主確 定創建何種產品對象,而如何創建這個對象的細節則完全封裝在具體工廠內部。工廠方法模 式之所以又被稱爲多態工廠模式,就正是因爲所有的具體工廠類都具有同一抽象父類。

(3) 使用工廠方法模式的另一個優點是在系統中加入新產品時,無須修改抽象工廠和抽象產品 提供的接口,無須修改客戶端,也無須修改其他的具體工廠和具體產品,而只要添加一個具 體工廠和具體產品就可以了,這樣,系統的可擴展性也就變得非常好,完全符合“開閉原則”。

工廠方法模式的主要缺點如下:

(1) 在添加新產品時,需要編寫新的具體產品類,而且還要提供與之對應的具體工廠類,系統 中類的個數將成對增加,在一定程度上增加了系統的複雜度,有更多的類需要編譯和運行, 會給系統帶來一些額外的開銷。

(2) 由於考慮到系統的可擴展性,需要引入抽象層,在客戶端代碼中均使用抽象層進行定義, 增加了系統的抽象性和理解難度,且在實現時可能需要用到DOM、反射等技術,增加了系統 的實現難度。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章