工廠方法模式定義了一個建立對象的接口,但由子類決定要執行個體化的類是哪一個。工廠方法讓類把執行個體化推遲到子類。

Creator是一個類,它實作了所有操縱産品的方法,但不實作工廠方法。Creator的所有子類都必須實作工廠方法(factoryMethod()),以實際制造出産品。
所有的産品必須實作Product基類,這樣一來使用這些産品的類就可以引用這個基類,而不是派生類。
披薩店希望能夠開一些加盟店。經營者希望確定加盟店營運的品質,是以希望這些店都使用能經過實踐考研的代碼。問題在于每家加盟店都可能想要提供不同風味的披薩(比方說紐約,芝加哥,加州),這收到了開店地點及該地區披薩口味的影響。
解決辦法:讓每個區域風味的披薩工廠繼承基類披薩工廠使披薩工廠的訂單系統不變,然後建立自己風味的披薩。這樣真正選購披薩類型,使用具體的披薩工廠決定的。
首先建立Pizza類
然後建立紐約cheese風格的pizza類和紐約clam風格的pizza類
建立基類工廠
建立具體類工廠(紐約pizza工廠)
客戶代碼:
執行結果:
PreparingNY Style Sauce and Cheese Pizza
Tossingdough
Addingsauce
Addingtoppings
Grated Reggiano Cheese
Bakefor 25 minutes at 350
Cuttingthe pizza into diagonal slices
Placepizza in offical PizzaStore box
Ethanordered a NY Style Sauce and Cheese Pizza
請按任意鍵繼續. . .
設計原則6:依賴倒置原則(Dependency Inversion Priciple):要依賴抽象,不要依賴具體類。
設計原則4:工廠方法用來處理對象的建立,并将這樣的行為封裝在子類中。這樣,客戶中關于基類的代碼和子類對象對象建立代碼解耦了。
參考Head First設計模式