将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示;
使用构建者模式,又称生成器模式,用户就只需要指定 需要建造的类型,就可以得到他们,而具体的建造过程和细节就不需要知道了;
实现代码:
/// <summary>
/// 具体产品类
/// </summary>
public class Product
{
IList<string> parts = new List<string>();
public void Add(string part)
{
parts.Add(part);
}
public void show()
{
Console.WriteLine("--------------------------");
foreach (string part in parts)
{
Console.WriteLine(part);
}
}
}
/// <summary>
/// Builder类
/// </summary>
public abstract class Builder
{
public abstract void BuilderPartA();
public abstract void BuilderPartB();
public abstract Product GetResult();
}
/// <summary>
/// 建造产品类1
/// </summary>
public class ConcreteBuilderOne : Builder
{
private Product product = new Product();
public override void BuilderPartA()
{
product.Add("部件A");
}
public override void BuilderPartB()
{
product.Add("部件B");
}
public override Product GetResult()
{
return product;
}
}
/// <summary>
/// 建造产品类2
/// </summary>
public class ConcreteBuilderTwo : Builder
{
private Product product = new Product();
public override void BuilderPartA()
{
product.Add("部件X");
}
public override void BuilderPartB()
{
product.Add("部件Y");
}
public override Product GetResult()
{
return product;
}
}
/// <summary>
/// 指挥者类
/// </summary>
public class Director
{
public void Construct(Builder builder)
{
builder.BuilderPartA();
builder.BuilderPartB();
}
}
客户端访问代码:
Director director = new Director();
Builder b1 = new ConcreteBuilderOne();
Builder b2 = new ConcreteBuilderTwo();
director.Construct(b1);
Product p1 = b1.GetResult();
p1.show();