Factory模式,可分爲2種,一種爲簡單Factory模式,另一種爲Factory方法模式,這2種都是使用廣泛的Factory模式,側重點不同,優缺點也不同。
一 簡單Factory模式
意圖:定義一個工廠類,讓調用客戶端決定工廠生產哪一種產品。
何時使用:屏蔽產品生產細節,根據用戶輸入條件來抉擇。
這種模式中,工廠類扮演上帝的角色,用戶告訴工廠類需要什麼樣的產品,工廠類就去創造出來,沒有則返回null。
在此處創建產品,可以使用兩種方法創建:
1)定義一個創建函數,根據參數的不同來創建不同的產品;
2)定義多個創建函數,根據函數的不同來創建出不同的產品。
二 Factory方法模式
意圖:定義一個創建對象的接口,讓其子類自己決定實例化哪一個工廠類,工廠模式使其創建過程延遲到子類進行。
主要解決:主要解決接口選擇的問題。
何時使用:我們明確地計劃不同條件下創建不同實例時。
如何解決:讓其子類實現工廠接口,返回的也是一個抽象的產品。
關鍵代碼:創建過程在其子類執行。在這種模式中,有一個工廠基類,並在該工廠基類中聲明瞭唯一的創建產品的接口(pure virtual)。具體地要創建什麼樣的產品,由工廠的子類來決定,實例化。
即工廠基類不去實例化產品,創建過程在子類中執行。
對比:相比於簡單Factory模式,Factory方法模式的開閉原則更強,一旦有新的成員添加進來,並不會修改原先類的內容。而是創建一組遵循工廠基類和產品基類定義的方式,就可以正常運行了。