允许修改产品的内部表示,同时也隐藏的装配产品的细节。
每个特定的生成器都是独立的。类似抽象工厂,返回有许多方法和对象组成的类,抽象工厂返回的是相关的产品类;
而生成器则是根据它的数据一步一步一的构建复杂的对象。
把复杂对象的生成从构造函数中分离出来。
1.Director:使用Builder来生成对象
public class Director
{
public void CreateObject(Builder b)
{
b.BuildProductPartA();
b.BuildProductPartB();
}
}
2.Builder:生成复杂产品的一部分内容的抽象接口
public abstract class Builder
{
public abstract void BuildProductPartA();
public abstract void BuildProductPartB();
public abstract Product GetResult();
}
3.ConcreteBuiilder:实现Builder的逻辑,并且含有返回Product的接口。
public class ConcreteBuilder : Builder
{
private readonly Product _product = new Product();
public override void BuildProductPartA()
{
_product.Add("PartA");
}
public override void BuildProductPartB()
{
_product.Add("PartB");
}
public override Product GetResult()
{
return _product;
}
}
public class ConcreteBuilder : Builder
{
private Product _product = new Product();
}
4.Product:复杂的对象
public class Product
{
public void Add(string x)
{
return;
}
}
如何调用:
public class Client
{
public void Create()
{
Builder builder = new ConcreteBuilder();
Director director = new Director();
director.CreateObject(builder);
Product pro = builder.GetResult();
}
}