建造者模式是一种创建型模式,它主要是应对项目中一些复杂对象的创建工作。所谓“复杂对象”,是指此对象中还含有其它的子对象。我们现在定义一个场景:汽车生产必须包含车轮(Wheel)、油箱(OilBox)和车身(Body),应用建造者模式,用C#控制台应用程序实现该设计,构建BMW品牌和BenZ品牌汽车生产。绘制该模式的UML图。
namespace shiyan4jianzaozhemoshi
{
class Product
{
private string partA;
private string partB;
private string partC;
public string PartA
{
set { partA = value; }
get { return partA; }
}
public string PartB
{
set { partB = value; }
get { return partB; }
}
public string PartC
{
set { partC = value; }
get { return partC; }
}
public void Introduce()
{
Console.WriteLine(PartA);
Console.WriteLine(PartB);
Console.WriteLine(PartC);
Console.WriteLine();
}
}
abstract class Builder
{
protected Product product = new Product();
public abstract void BuildPartA();
public abstract void BuildPartB();
public abstract void BuildPartC();
public Product GetResult()
{
return product;
}
}
class ConcreteBuilderBMW : Builder
{
public override void BuildPartA()
{
product.PartA = "Finish Wheel for BMW";
}
public override void BuildPartB()
{
product.PartB = "Finish OilBox for BMW";
}
public override void BuildPartC()
{
product.PartC = "Finish Body for BMW";
}
}
class ConcreteBuilderBenZ : Builder
{
public override void BuildPartA()
{
product.PartA = "Finish Wheel for BenZ";
}
public override void BuildPartB()
{
product.PartB = "Finish OilBox for BenZ";
}
public override void BuildPartC()
{
product.PartC = "Finish Body for BenZ";
}
}
class Director
{
private Builder builder;
public Director(Builder builder)
{
this.builder = builder;
}
public void SetBuilder(Builder builder)
{
this.builder = builder;
}
public void Construct()
{
builder.BuildPartA();
builder.BuildPartB();
builder.BuildPartC();
}
}
class Program
{
static void Main(string[] args)
{
Product pt;
Builder bd = new ConcreteBuilderBMW();
Director dt = new Director(bd);
dt.Construct();
pt = bd.GetResult();
pt.Introduce();
bd = new ConcreteBuilderBenZ();
dt.SetBuilder(bd);
dt.Construct();
pt = bd.GetResult();
pt.Introduce();
//Console.ReadKey();
//Console.ReadLine();
//Console.Read();
}
}
}