
using System;
using System.Collections.Generic;
using System.Text;
///Builder(生成器)模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
///add by jzh 2007-04-15
namespace DesignPattern
{
/// <summary>
/// Director(指导者)角色:调用具体建造者角色以创建产品对象。
/// 指导者并没有产品类的具体知识,真正拥有产品类的具体知识的是具体建造者对象。
/// </summary>
class Director
{
public void Construct(AbstractBuilder abstractBuilder)
{
abstractBuilder.BuildPartA();
abstractBuilder.BuildPartB();
abstractBuilder.BuildPartC();
}
}
abstract class AbstractBuilder
{
abstract public void BuildPartA();
abstract public void BuildPartB();
abstract public void BuildPartC();
}
/// <summary>
/// Concrete Builder(具体生成器)角色:担任这个角色的是于应用程序紧密相关的类,
/// 它们在指导者的调用下创建产品实例。
/// 这个角色在实现抽象建造者角色提供的方法的前提下,达到完成产品组装,提供成品的功能。
/// </summary>
class ConcreteBuilder : AbstractBuilder
{
override public void BuildPartA()
{
// 待创建的复杂对象。它要包含那些定义组件的类,包括将这些组件装配成产品的接口。
Console.WriteLine("ConcreteBuilder.BuildPartA 调用");
}
override public void BuildPartB()
{
Console.WriteLine("ConcreteBuilder.BuildPartB 调用");
}
override public void BuildPartC()
{
Console.WriteLine("ConcreteBuilder.BuildPartC 调用");
}
}
public class Client
{
public static void Main(string[] args)
{
ConcreteBuilder concreteBuilder = new ConcreteBuilder();
Director director = new Director();
director.Construct(concreteBuilder);
Console.ReadLine();
}
}
}