建造者模式(生成器模式)
[ Builder ]
[
建造者模板接口 : 定义了一系列需要具体实现的虚方法
具体的建造者 : 实现了建造者模板接口 ,不同的实现细节
建造指挥者 : 用于按照一定的顺序 , 生成对象
]
将一个复杂对象的构建与它的表示分离 , 使得同样的构建过程可以创建不同的表示 。
创建建设者接口 , 定义了一些列构建需要的方法
创建构建子类 , 实现建设者接口 , 实现构建细节
创建建设者指挥官类 , 通过传递建设者接口对象 , 定义了具体构建的顺序
源码 :
// <summary>
//建造者模板接口 , 定义了一系列需要具体实现的虚方法
// </summary>
public interface IBuilder
{
void Top();
void Middle();
void Bottom();
}
// <summary>
// 建造者具体实现类
// </summary>
public class BuilderA :IBuilder
{
#region IBuilder 成员
public void Top()
{
Console.WriteLine("BuilderA Top");
}
public void Middle()
{
Console.WriteLine("BuilderA Middle");
}
public void Bottom()
{
Console.WriteLine("BuilderA Bottom");
}
#endregion
}
// <summary>
// 建造者具体实现类
// </summary>
public class BuilderB :IBuilder
{
#region IBuilder 成员
public void Top()
{
Console.WriteLine("BuilderB Top");
}
public void Middle()
{
Console.WriteLine("BuilderB Middle");
}
public void Bottom()
{
Console.WriteLine("BuilderB Bottom");
}
#endregion
}
// <summary>
//建设者模式的指挥官类 , 该类定义了建设者具体实现类的构建过程
// </summary>
public class Director
{
public void Constract(IBuilder builder)
{
//具体的建设流程 , 如何想更改构建顺序 , 则更改调用方法的顺序
builder.Top();
builder.Middle();
builder.Bottom();
}
}
public class OtherDirector
{
IBuilder builder;
public OtherDirector(IBuilder builder)
{
this.builder = builder;
}
public void Constract()
{
//具体的建设流程 , 如何想更改构建顺序 , 则更改调用方法的顺序
builder.Middle();
builder.Top();
builder.Bottom();
}
}
class Program
{
static void Main(string[] args)
{
Director director = new Director();
director.Constract(new BuilderA()); //正常的构建
Console.WriteLine("***********************************");
OtherDirector ot = new OtherDirector(new BuilderB()); //非正常构建 , 打乱了构建顺序
ot.Constract();
Console.Read();
}
}