分類
建立型模式。
這個模式在解決什麼
工廠模式要處理的核心問題是:建立物件這件事本身很容易變複雜,而我們不想讓呼叫端直接依賴具體類別。
它常見的目的有兩個:
- 把「建立哪一個具體物件」的決策封裝起來
- 讓上層程式依賴抽象,而不是一路
new到具體實作
核心做法
這裡通常會提到兩種常見變體:
- 工廠方法模式:在父類別中宣告工廠方法,讓子類別決定實際要建立哪種產品
- 抽象工廠模式:先定義一組工廠介面,讓不同的具體工廠負責建立同一個產品家族中的多個元件
前者重點是把「某一個產品」的建立交給子類別延伸;後者重點是讓一整組彼此相容的產品可以一起被建立出來。
什麼時候適合用
下面幾種情況很適合用工廠模式:
- 建立流程不只是單純
new一個物件,而是伴隨初始化、配置或條件判斷 - 系統可能會切換不同實作,但呼叫端不該知道具體類別
- 你想把一整組相容的物件打包成同一套建立規則
如果只是很單純地建立一個小物件,直接建構通常就夠了,不一定需要引入工廠。
例子
假設遊戲裡要建立不同陣營的 UI 套件。若只是按平台切換按鈕樣式、面板樣式、提示框樣式,就很適合用抽象工廠,讓 FantasyThemeFactory 和 SciFiThemeFactory 各自建立同一家族的元件。
如果只是要在不同情境下建立不同敵人類型,則可能用工廠方法就夠了,讓不同的生成器決定是產出近戰敵人、遠程敵人還是菁英敵人。
類圖


這一篇先記住的重點
- 工廠模式的重點不是「幫你少打一個
new」,而是把建立責任集中管理 - 工廠方法偏向單一產品的延伸點
- 抽象工廠偏向一整個產品家族的一致性
參考書目
《Head First Design Patterns》Eric Freeman, Elisabeth Robson, Kathy Sierra, Bert Bates