意图
适用于那些内部结构比较复杂的产品对象.
构成---参与者:
Builder:抽象建造者。它声明为创建一个Product对象的各个部件指定的抽象接口。
Builder:抽象建造者。它声明为创建一个Product对象的各个部件指定的抽象接口。
ConcreteBuilder:具体建造者。实现抽象接口,构建和装配各个部件。不同的 ConcreteBuilder可以更换顺序参数,取得不同的结果.
Director:指挥者。构建一个使用Builder接口的对象。它主要是用于创建一个复杂的对象,它主要有两个作用,一是:隔离了客户与对象的生产过程,二是:负责控制产品对象的生产过程。
Product:产品角色。一个具体的产品对象。
Director:指挥者。构建一个使用Builder接口的对象。它主要是用于创建一个复杂的对象,它主要有两个作用,一是:隔离了客户与对象的生产过程,二是:负责控制产品对象的生产过程。
Product:产品角色。一个具体的产品对象。
abstract class 生产者//抽象
{
public abstract void BuildPartA();
public abstract void BuildPartB();
public abstract 产品 GetResult();
}
下面是具体的建造者
class 生产者1:生产者
{
private 产品 _product = null;
public 生产者1(产品 product)
{
_product = product; //在构造函数传入要生产的产品
}
public override void BuildPartA()
{
_product.Add("A"); //A工序
}
public override void BuildPartB()
{
_product.Add("B");//B工序
}
public override 产品 GetResult()
{
return _product;//返回产品
}
}
下面是指挥者
class 设计者
{
public void Builder(生产者 product)
{//指挥生产者生产的具体步骤
product.BuildPartA();
product.BuildPartB();
}
}
下面是产品
class 产品
{
private List<string> cc = new List<string>();
public void Add(string str) //产品组装中
{
cc.Add(str);
}
public string Show() //就是完整的产品了
{
string str = "";
foreach (string dd in cc )
{
str+= dd+"\r\n";
}
return str;
}
}
//下面是直接调用
生产者 product = new 生产者2(new 产品());//生产者生产
设计者 builder = new 设计者();
builder.Builder(product);//设计者指挥生产
产品 cp = product.GetResult(); //然后在生产者那里取回生产好的产品
MessageBox.Show(cp.Show());//将产品显示来出
//源码 ‘建造者模式1’进行了优化,去掉了 ‘设计者’,在调用界面链式调用
AbstractBuilder builder = new ConcreteBuilder(new 产品())
.BuildPartScan()
.BuildPartTest()
.BuildPartSave();
var pro = builder.Build();//返回加载好的产品类
if (!pro.Test()) //调用
{
MessageBox.Show("NG");
}
MessageBox.Show("OK");