名称:生成器模式
意图:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
适用环境:
1、当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
2、当构造过程必须允许被构造的对象有不同的表示时。
classDirector
{
publicvoidConstruct(Buidlerbuilder)
{
builder.BuildPartA();
builder.BuildPartB();
}
}
abstractclassBuidler
{
publicabstractvoidBuildPartA();
publicabstractvoidBuildPartB();
publicabstractProductGetResult();
}
classConcreateBuilder1: Buidler
{
privateProduct_product = newProduct();
publicoverridevoidBuildPartA()
{
_product.Add("PartA");
}
publicoverridevoidBuildPartB()
{
_product.Add("PartB");
}
publicoverrideProductGetResult()
{
return_product;
}
}
classConcreateBuilder2: Buidler
{
privateProduct_product = newProduct();
publicoverridevoidBuildPartA()
{
_product.Add("PartX");
}
publicoverridevoidBuildPartB()
{
_product.Add("PartY");
}
publicoverrideProductGetResult()
{
return_product;
}
}
classProduct
{
privateList<string> _parts = newList<string>();
publicvoidAdd(stringpart)
{
_parts.Add(part);
}
publicvoidShow()
{
Console.WriteLine("\nProduct parts 产品类型(汽车、摩托车)");
foreach(stringpart in_parts)
{
Console.WriteLine(part);
}
}
}
调用:
Directordirector = newDirector();
Buidlerb1 = newConcreateBuilder1();
Buidlerb2 = newConcreateBuilder2();
director.Construct(b1);
Productp1 = b1.GetResult();
p1.Show();
director.Construct(b2);
Productp2 = b2.GetResult();
p2.Show();
输出:
Product parts 产品类型(汽车、摩托车)
PartA
PartB
Product parts 产品类型(汽车、摩托车)
PartX
PartY