將複雜構建與其表示分離,使相同構建過程可創建不同表示。
電腦城裝機:銷售詢問配置→出裝機單→提貨備料→技術人員按固定流程組裝(鎖主板→裝 CPU→裝記憶體→接硬碟→裝顯卡)。每台電腦零件不同(高/低配),但組裝流程固定。將變化零件與穩定流程分離 → Builder 模式。
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
namespace BuilderExemple
{
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
{
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
{
protected string name;
public string Name { get => name; set => name = value; }
protected Computer computer;
public Computer Computer { get => 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
{
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 賽揚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 酷睿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
{
public string Videocard { get; set; }
public string Cpu { get; set; }
public string Mainboard { get; set; }
public string Memory { get; set; }
public string Harddisk { get; set; }
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}");
}
}
}