完整實作代碼:電腦組裝案例
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
namespace BuilderExample
{
class Program
{
static void Main(string[] args)
{
ComputerFactory factory = new ComputerFactory();
ComputerBuilder office = new OfficeComputerBuilder();
factory.BuildComputer(office);
office.Computer.ShowSystemInfo();
ComputerBuilder game = new GameComputerBuilder();
factory.BuildComputer(game);
game.Computer.ShowSystemInfo();
}
}
class ComputerFactory // Director
{
public void BuildComputer(ComputerBuilder cb)
{
Console.WriteLine("\n>>>>>>>>>>>>>>>>>> Start Building " + cb.Name);
cb.SetupMainboard();
cb.SetupCpu();
cb.SetupMemory();
cb.SetupHarddisk();
cb.SetupVideocard();
Console.WriteLine(">>>>>>>>>>>>>>>>>> Build " + cb.Name + " Completed\n");
}
}
abstract class ComputerBuilder // Abstract Builder
{
protected string name;
public string Name { get { return name; } set { name = value; } }
protected Computer computer;
public Computer Computer { get { return computer; } set { computer = value; } }
public ComputerBuilder() { computer = new Computer(); }
public abstract void SetupMainboard();
public abstract void SetupCpu();
public abstract void SetupMemory();
public abstract void SetupHarddisk();
public abstract void SetupVideocard();
}
class OfficeComputerBuilder : ComputerBuilder // Concrete Builder
{
public OfficeComputerBuilder() { name = "OfficeComputer"; }
public override void SetupMainboard() => computer.Mainboard = "Abit 升技 LG-95C 主板 (Intel 945GC/LGA 775/1066MHz)";
public override void SetupCpu() => computer.Cpu = "Intel Celeron D 336 (2.8GHz/LGA 775/256K/533MHz)";
public override void SetupMemory() => computer.Memory = "Patriot DDR2 667 512MB";
public override void SetupHarddisk() => computer.Harddisk = "Hitachi SATAII 80G 7200轉 8M";
public override void SetupVideocard() => computer.Videocard = "主板集成";
}
class GameComputerBuilder : ComputerBuilder
{
public GameComputerBuilder() { name = "GameComputer"; }
public override void SetupMainboard() => computer.Mainboard = "GIGABYTE GA-965P-DS3 3.3 主板 (Intel P965)";
public override void SetupCpu() => computer.Cpu = "Intel Core 2 Duo E4400 (2.0GHz/LGA 775/2M/800MHz)";
public override void SetupMemory() => computer.Memory = "G.SKILL F2-6400CL5D-2GBNQ DDR2 800 1G*2";
public override void SetupHarddisk() => computer.Harddisk = "Hitachi SATAII 250G 7200轉 8M";
public override void SetupVideocard() => computer.Videocard = "七彩虹 GT-GD3 UP 烈焰戰神 H10 (GeForce 8600GT/256M/DDR3/HDMI)";
}
class Computer // Product
{
private string _videocard, _cpu, _mainboard, _memory, _harddisk;
public string Videocard { get { return _videocard; } set { _videocard = value; } }
public string Cpu { get { return _cpu; } set { _cpu = value; } }
public string Mainboard { get { return _mainboard; } set { _mainboard = value; } }
public string Memory { get { return _memory; } set { _memory = value; } }
public string Harddisk { get { return _harddisk; } set { _harddisk = value; } }
public void ShowSystemInfo()
{
Console.WriteLine("==================SystemInfo==================");
Console.WriteLine("CPU: " + _cpu);
Console.WriteLine("MainBoard: " + _mainboard);
Console.WriteLine("Memory: " + _memory);
Console.WriteLine("VideoCard: " + _videocard);
Console.WriteLine("HardDisk: " + _harddisk);
}
}
}
角色對應與流程
| 角色 | 類別 | 職責 |
| Director | ComputerFactory | 定義組裝順序:主板 → CPU → 記憶體 → 硬碟 → 顯卡 |
| Abstract Builder | ComputerBuilder | 宣告建構步驟介面,持有產品實例 |
| Concrete Builder | OfficeComputerBuilder, GameComputerBuilder | 實作具體零件選擇 |
| Product | Computer | 最終產出物件 |
模式優勢體現
- 相同組裝流程(Director)產出截然不同配置(Builder)
- 新增機型(如 Workstation)只需新增 Builder,零修改 Director
- 建構細節封裝在 Builder,Client 僅需選擇 Builder 類型