🎯 什麼情境該想到我

當你的類別事先不知道該建立哪一種物件、想把「決定要生出哪種東西」的權力交給子類別;或者程式裡到處散落 new、你想把「建立物件」這件事集中管起來時。

⚙️ 怎麼用(步驟 / 公式)

  1. 意圖:定義一個建立物件的介面,讓子類別決定要實例化哪一個類別,把實例化延遲到子類。
  2. 主要參與者Product(產品介面)、ConcreteProduct(具體產品)、Creator(宣告 factoryMethod() 回傳 Product,通常也含使用產品的商業邏輯)、ConcreteCreator(覆寫 factoryMethod 回傳具體產品)。
  3. 做法:父類 Creator 宣告 factoryMethod() 回傳產品介面,並在其他方法裡呼叫它;子類 ConcreteCreator 覆寫 factoryMethod() 決定回傳哪個具體產品。父類邏輯完全不碰具體型別。
  4. 要多支援一種產品 → 新增一個產品類別+一個對應的 Creator 子類。

🧪 我實際套用的紀錄

  • (待填)

⚠️ 注意 / 什麼時候不適用

  • 每多一種產品往往就要多一個子類,類別數量會膨脹。
  • 與抽象工廠的差別:工廠方法聚焦「單一產品」的建立(一個方法一種產品),抽象工廠處理的是「一整個產品家族」;只需要生一種東西時別動用抽象工廠。
  • 若建立邏輯永遠不變、也沒有多型需求,直接 new 反而更單純。

🔗 相關工具