一、定義
GOF上對工廠方法的意圖如此描述:定義一個用于建立對象的接口,讓子類決定執行個體化哪個類。Factory Method使一個類的執行個體化延遲到其子類。
作為類的開發者,我們通常會在類中提供構造器方法以便客戶代碼執行個體化該類。然而有時候,客戶代碼并不清楚該對幾個類中的哪一類進行執行個體化。可以用工廠模式定義一個用于建立對象的接口,同時控制對哪個類進行的執行個體化。
二、應用場景
工廠方法模式的特征是:
(1)方法建立了一個新的對象;
(2)方法的傳回類型為一個抽象類或接口;
(3)有若幹個類實作了上述抽象類型。
三、類圖

四、例子
(1)工廠方法最典型的一個例子就是在疊代器模式中的應用,這裡的工廠方法連結了兩個平行的類層次結構。
當一個類将它的一些職責委托給一個獨立的類時,就産生了平行類層次。疊代器模式中,各個組合類型将周遊元素的操作獨立出
來,形成了疊代器類層次。
每個組合類型都和一個相應類型的疊代器對應。組合類的對象需要執行個體化對應自己的疊代器(通過CreateIterator方法),這裡的
CreateIterator方法就是工廠方法。 具體代碼可以看之前的疊代器模式日志。
(2)工廠方法還能為子類提供hook,用工廠方法在一個類的内部建立對象通常比直接建立對象更為靈活。
GOF的代碼示例裡利用了MazeGame的例子,基類提供了Maze,Room,Wall等的工廠方法預設實作。子類通過重載這些方法,
可以利用createMaze方法建立帶有炸彈的迷宮。這樣更有靈活性,由子類決定執行個體化哪個類型的迷宮元件。