建造者模式將一個複雜對象的構建過程與其表示分離,使得相同的構建過程可以創建不同的表示。適用於構建步驟固定但內容多變的場景。

演示如何用建造者模式封裝「打開冰箱→放入物品→關閉冰箱」的固定流程,支援不同物品(大象、牛奶、披薩、甚至另一個冰箱)的裝箱。
namespace 把大象裝冰箱 {
// 抽象建造者:固定構建步驟
abstract class PutIntoFridge {
public abstract void OpenFridge();
public abstract void PutInto();
public abstract void CloseFridge();
}
// 具體建造者:大象裝箱實現
class PutElephantIntoFridge : PutIntoFridge {
private string name;
public PutElephantIntoFridge(string name) { this.name = name; }
public override void OpenFridge() { Console.WriteLine("打開了冰箱門~~"); }
public override void PutInto() { Console.WriteLine("把 {0} 裝進冰箱。", name); }
public override void CloseFridge() { Console.WriteLine("把冰箱門關上了。"); }
}
// 指揮者:控制流程
class Director {
private PutIntoFridge builder;
public Director(PutIntoFridge b) { builder = b; }
public void Construct() {
builder.OpenFridge();
builder.PutInto();
builder.CloseFridge();
}
}
class Program {
static void Main() {
var elephant = new PutElephantIntoFridge("小象");
var director = new Director(elephant);
director.Construct();
}
}
}

| 優點 | 缺點 |
|---|---|
| 構建過程與表示分離,擴展性強 | 產品結構變化大時需修改抽象建造者 |
| 細節封裝在具體建造者中,符合單一職責 | 每種產品需對應一個具體建造者,類數量增加 |
| 指揮者隔離客戶端,降低耦合 | 不適用於構建步驟差異極大的產品 |