using System;
using System.Collections.Generic;
/**
* 建造模式
* http://www.cnblogs.com/zhili/p/BuilderPattern.html
* ***/
namespace BuilderPatternDemo
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("BuilderPatternDemo");
Director d = new Director();
Builder1 b1 = new Builder1();
Builder2 b2 = new Builder2();
d.Construct(b1);
d.Construct(b2);
Computer c1 = b1.GetComputer();
Computer c2 = b2.GetComputer();
c1.Show();
c2.Show();
Console.Read();
}
}
class Computer
{
public List<string> parts = new List<string>();
public void Add(string part)
{
this.parts.Add(part);
}
public void Show()
{
foreach (var inst in this.parts)
{
Console.WriteLine(inst + "已经组装好");
}
Console.WriteLine("电脑已经组装好了");
}
}
abstract class Builder
{
protected Computer computer = new Computer();
public abstract void BuildCPU();
public abstract void BuildMemory();
public abstract Computer GetComputer();
}
class Builder1 : Builder
{
public override void BuildCPU()
{
this.computer.Add("CPU1");
}
public override void BuildMemory()
{
this.computer.Add("内存1");
}
public override Computer GetComputer()
{
return this.computer;
}
}
class Builder2 : Builder
{
public override void BuildCPU()
{
this.computer.Add("CPU2");
}
public override void BuildMemory()
{
this.computer.Add("内存2");
}
public override Computer GetComputer()
{
return this.computer;
}
}
class Director
{
public void Construct(Builder b)
{
b.BuildCPU();
b.BuildMemory();
}
}
}