建造者模式(生成器模式)

[ 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();
  }
}

posted on 2012-02-21 12:09  多个马甲  阅读(222)  评论(0编辑  收藏  举报