[转载] C#面向对象设计模式纵横谈——4. Builder生成器模式

主讲:李建忠

来源:http://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/consyscourse/CsharpOOD.aspx

 

clip_image002

clip_image004

clip_image006

clip_image008

clip_image010

 

Builderpublic abstract class House
{

}

public abstract class Door
{

}

public abstract class Wall
{

}

public abstract class Windows
{

}

public abstract class Floor
{

}

public abstract class HouseCeiling
{

}

public abstract class HouseBuilder
{
  //房屋的各个部分
  public abstract void BuildDoor();
  public abstract void BuildWall();
  public abstract void BuildWindows();
  public abstract void BuildFloor();
  public abstract void BuildHouseCeiling();

  public abstract House GetHouse();

}

GameManagerpublic class GameManager
{
  //构造房屋(复杂对象)的算法
  public static House CreateHouse(Builder builder)
  {
    //部分对象构造的次数可以通过数据库或配置文件来控制
    builder.BuildDoor();
    builder.BuildDoor();

    builder.BuildWall();
    builder.BuildWall();

    builder.BuildWindows();
    builder.BuildWindows();

    builder.BuildFloor();
    builder.BuildHouseCeiling();

    return builder.GetHouse();
  }
}

RomanHouseBuilderpublic class RomanHouse:House
{

}

public class RomanDoor:Door
{

}

public class RomanWall:Wall
{

}

public class RomanWindows:Windows
{

}

public class RomanFloor:Floor
{

}

public class RomanHouseCeiling:HouseCeiling
{

}

public class RomanHouseBuilder:HouseBuilder
{
  public override void BuildDoor()
  {

  }
  public override void BuildWall()
  {

  }
  public override void BuildWindows()
  {

  }
  public override void BuildFloor()
  {

  }
  public override void BuildHouseCeiling()
  {

  }

  public override House GetHouse()
  {

  }
}

Clientclass App
{
  public static void Main()
  {
    //对于风格的变化(罗马风格或经典风格),可以通过配置文件+动态反射来解决
    string assemblyName=configurationSetting["BuilderAssembly"];
    string builderName=configurationSetting["BuilderClass"];
    Assembly assembly=Assembly.Load(assemblyName);    
    Type t=assembly.GetType("builderName");

    Builder builder=Activator.CreateInstance(t);

    House house=GameManager.CreateHouse(new RomanHouseBuilder());
  }
}

 

clip_image012

转载于:https://www.cnblogs.com/6DAN_HUST/archive/2011/05/29/2062102.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值