namespace 建造者模式
{
/* 建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构造过程可以创建不同的表示*/
class Program
{
static void Main(string[] args)
{
ConcreteBuilder builder = new ConcreteBuilder();
HtmlDirector director = new HtmlDirector();
director.ConstructHtml(builder);
}
}
public class Html
{
public string Head { get; set; }
public string Body { get; set; }
public void SetHead(string content)
{
this.Head = content;
Console.WriteLine("head=:" + content);
}
public void SetBody(string content)
{
this.Body = content;
Console.WriteLine("body=:" + content);
}
public override string ToString()
{
return string.Format("head={0}\r\nbody={1}", this.Head, this.Body);
}
}
/// <summary>
/// 抽象建造者(定义需要建造的功能模版)
/// </summary>
public interface IHtmlBuilder
{
void BuildHeader();
void BuilderBody();
Html BuildHtml();
}
/// <summary>
/// 具体建造者 (实现要建造的具体功能,建造的具体过程和细节不用外部知道,建造是稳定的)
/// </summary>
public class ConcreteBuilder : IHtmlBuilder
{
private Html html;
public ConcreteBuilder()
{
html = new Html();
}
public void BuildHeader()
{
html.SetHead("<header></header>");
}
public void BuilderBody()
{
html.SetBody("<body></body>");
}
public Html BuildHtml()
{
return html;
}
}
/// <summary>
/// 指导者 (具体怎么建造、建造流程、顺序)
/// </summary>
public class HtmlDirector
{
/// <summary>
/// 构造具体的对象
/// </summary>
/// <param name="builder">建造者</param>
/// <returns>构造完毕的实体</returns>
public Html ConstructHtml(IHtmlBuilder builder)
{
//指导者指挥 建造过程
builder.BuildHeader();
builder.BuilderBody();
return builder.BuildHtml();
}
}
}
运行结果: