using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
优点:同样的构建过程,不同的表现形式,换房子的窗户,换房子的地板
///同属于一个大对象的子对象在变化的时候使用这个模式
缺点:难以应对分步骤的去构造房子
优点:关闭修改,开放扩展
namespace ConsoleApplication2
{
class build
{
}
public abstract class Builder
{
public abstract void BuildDoor();
public abstract void BuildWall();
public abstract void BuildWindows();
public abstract void BuildFloor();
public abstract void BuildHourseCeiling();
public abstract Hourse GetHourse();
}
public abstract class Door { }
public abstract class Wall { }
public abstract class Windows { }
public abstract class Floor { }
public abstract class HourseCeiling { }
public abstract class Hourse { }
具体实现的类
public class RomainHourse : Hourse
{
}
/// <summary>
/// 具体实现的类
/// </summary>
public class RomainBuilder : Builder
{
public override void BuildDoor() { }
public override void BuildWall() { }
public override void BuildWindows() { }
public override void BuildFloor() { }
public override void BuildDoor() { }
public override void BuildHourseCeiling() { }
public override Hourse GetHourse()
{
return new RomainHourse();
}
}
public class RomainDoor : Door { }
public class RomainWall : Wall { }
public class RomainWindows : Windows { }
public class RomainFloor : Floor { }
public class RomainHourseCeiling : HourseCeiling { }
///类文件 构造房子的类
public class GameManager
{
public static Hourse CreateHourse(Builder builder)
{
builder.BuildDoor();
builder.BuildDoor();
builder.BuildFloor();
builder.BuildHourseCeiling();
builder.BuildWall();
builder.BuildWindows();
return builder.GetHourse();
}
}
///类文件
/// <summary>
/// 客户端程序通过设置XML来调用客户端
/// </summary>
public class APP
{
public static void Main()
{
///可以在客户端使用XML文件进行配置
string assemblyName = configurationSettings["BuilderAssembly"];
string builderName = configurationSettings["BuilderClass"];
Assembly assembly = Assembly.Load(assemblyName);
Type t = assembly.GetType(builderName);
Builder builder = Activator.CreateInstance(t);
Hourse a = GameManager.CreateHourse(builder);
Hourse a1 = GameManager.CreateHourse(new RomainBuilder);
}
}
}
总结:代码看懂了,但是好像从来没遇到过!!汗