//========================
//Builder生成器(创建模式)
//========================
/*
1 解决的是哪一类问题?
  导致问题的原因:用户需求的变化(面向对象的思想的优点就是能应对需求变化)
  针对的是一个复杂的对象(它是由很多的子对象组成的 比如:House对象)
  复杂对象的各个部分相对变化要剧烈,但这些部分的算法的组合相对是稳定的2 如何解决这一类问题?
  把不变与变得东西隔离开
  
将一个复杂的对象的构造与这个复杂对象的表示分离开 ,使得同样的构建构成可以创建不同的表示----GOF
理解: 构建与表示   构建的过程大致一样,表示可以不同abstract factory系列对象的整理变化,
build 复杂对象的局部变化*///code 理解//抽象定义,我的理解是,脱离具体的高层的抽象“构架”
public abstract class House
{}public abstract class Door
{}public abstract class Builder
{
public abstract void BuildDoor();
public abstract void BuildWall();
public abstract void BuildWindows();
public abstract void BuildFloor();
public abstract void BuildHouseCeiling(); public abstract House GetHouse();}//以下的代码是不稳定的 以下是具体的实现了public  class RomeDoor:Door
{}
public  class RomeHouse:House
{}public  class RomeHouseBuilder:Builder
{
public override void BuildDoor()
{}
public override void BuildWall()
{}
public override  void BuildWindows()
{}
public override void BuildFloor()
{}
public override  void  BuildHouseCeiling()
{} public override  House GetHouse()
{}}
//下面的代码是相对比较稳定的
//构建过程是比较稳定的 比如说做房子的要做哪些东西
//我们可以看到它是在抽象的层次上构建的 这是比不难理解的
public class GameManger
{
public static House CreateHouse(Builder builder)
{
builder.BuildDoor();
builder.BuildDoor(); builder.BuildDoor();
builder.BuildDoor();
builder.BuildDoor(); //............ return builder.GetHouse();  
} public void play(){}
//.............}
//客户程序class App
{
public  static void Main()
{
House house=GameManger.CreateHouse(new RomeHouseBuilder());
// 改变风格
//House house=GameManger.CreateHouse(new ChinaHouseBuilder());
}
}