🎯 什麼情境該想到我
當你要組出來的東西很複雜、要一步一步慢慢拼(很多可有可無的部件或設定),而你不想寫出一長串落落長、參數多到看不懂的建構子;或者你想用「同一套組裝流程」做出好幾種不同成品時。
⚙️ 怎麼用(步驟 / 公式)
- 意圖:把複雜物件的「建構過程」與「最終表示」分離,讓同樣的建構流程能產生不同表示。
- 主要參與者:
Builder(宣告各步驟 buildPartA/buildPartB 的介面)、ConcreteBuilder(實作各步驟、保存中間結果、提供 getResult)、Director(用固定順序指揮 Builder 完成組裝)、Product(最終成品)。 - 做法:
Director呼叫Builder一步步buildPartX,組裝順序集中在 Director;換一顆ConcreteBuilder就能用同一流程產出不同表示,最後由 Builder 的getResult()取回成品。 - 想改變成品長相 → 換 Builder;想改變組裝順序 → 改 Director。
🧪 我實際套用的紀錄
- (待填)
⚠️ 注意 / 什麼時候不適用
- 適合「建構步驟相對固定,但組態/表示變化多」的情況。
- 物件很簡單、欄位沒幾個時,硬套 Builder 是過度設計,反而增加類別數量與樣板碼。
- Builder 通常要為每種產品各寫一個 ConcreteBuilder,種類多時類別會變多。