🎯 什麼情境該想到我
當你的類別事先不知道該建立哪一種物件、想把「決定要生出哪種東西」的權力交給子類別;或者程式裡到處散落 new、你想把「建立物件」這件事集中管起來時。
⚙️ 怎麼用(步驟 / 公式)
- 意圖:定義一個建立物件的介面,讓子類別決定要實例化哪一個類別,把實例化延遲到子類。
- 主要參與者:
Product(產品介面)、ConcreteProduct(具體產品)、Creator(宣告factoryMethod()回傳 Product,通常也含使用產品的商業邏輯)、ConcreteCreator(覆寫 factoryMethod 回傳具體產品)。 - 做法:父類
Creator宣告factoryMethod()回傳產品介面,並在其他方法裡呼叫它;子類ConcreteCreator覆寫factoryMethod()決定回傳哪個具體產品。父類邏輯完全不碰具體型別。 - 要多支援一種產品 → 新增一個產品類別+一個對應的 Creator 子類。
🧪 我實際套用的紀錄
- (待填)
⚠️ 注意 / 什麼時候不適用
- 每多一種產品往往就要多一個子類,類別數量會膨脹。
- 與抽象工廠的差別:工廠方法聚焦「單一產品」的建立(一個方法一種產品),抽象工廠處理的是「一整個產品家族」;只需要生一種東西時別動用抽象工廠。
- 若建立邏輯永遠不變、也沒有多型需求,直接
new反而更單純。