將一個複雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示;
使用構建者模式,又稱生成器模式,用戶就只需要指定 需要建造的類型,就可以得到他們,而具體的建造過程和細節就不需要知道了;
實現代碼:
/// <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();