🎯 什麼情境該想到我
當你想「一次整套切換」一群會一起用的東西——換個 UI 主題、換一種資料庫驅動、換一個作業系統的元件,而且要確保換完之後這一整組還能互相搭配、不會混搭出錯時。
⚙️ 怎麼用(步驟 / 公式)
- 意圖:提供一個介面來建立「一系列相關或相依的物件家族」,而不指定它們的具體類別。
- 主要參與者:
AbstractFactory(宣告一整組建立方法的介面)、ConcreteFactory(各自產出一整套搭配好的產品)、AbstractProduct(每種產品的介面)、ConcreteProduct(具體產品)、Client(只依賴介面)。 - 做法:在
AbstractFactory介面裡放多個建立方法(createButton、createCheckbox…);每個ConcreteFactory(如 WindowsFactory、MacFactory)覆寫這些方法,回傳同一家族、彼此搭配的產品。 - Client 只拿著
AbstractFactory與AbstractProduct介面工作,換家族只要換一顆工廠實例,其餘程式碼不動。
🧪 我實際套用的紀錄
- (待填)
⚠️ 注意 / 什麼時候不適用
- 新增「產品種類」很痛:要在
AbstractFactory介面加一個方法,所有既有工廠都得跟著改,牽一髮動全身。 - 新增「產品家族」很輕鬆:只要多寫一個
ConcreteFactory即可,這正是它擅長的方向。 - 產品種類會頻繁增減、但家族其實不多時,這模式會變成負擔,屬於過度設計。