Build(建造者模式)
构建与表示分离
与工厂模式不同的是:工厂注重在于创建,Builder注重在于构建(创建细节)
public class House
{
public string Foundation{ get; set;}
public string Wall{get; set;}
public string Roof{ get; set;}
public string ToString()
{
return Foundation + " " + Wall +" "+ Roof;
}
}
public abstract class Builder
{
public abstract void BuildFoundation (string foundation);
public abstract void BuildWall(string wall);
public abstract void BuildRoof(string roof);
public abstract House Create ();
}
public class RobotBuilder:Builder
{
House house = new House();
public override void BuildFoundation (string foundation)
{
house.Foundation = foundation;
}
public override void BuildWall (string wall)
{
house.Wall = wall;
}
public override void BuildRoof (string roof)
{
house.Roof = roof;
}
public override House Create()
{
return house;
}
}
public class Director
{
private Builder builder;
public Director (Builder builder)
{
this.builder = builder;
}
public void Construct(string foundation,string wall,string roof)
{
builder.BuildFoundation(foundation);
builder.BuildWall(wall);
builder.BuildRoof(roof);
}
}
public class BuilderTest : MonoBehaviour {
private void Start () {
Builder builder = new RobotBuilder ();
Director director = new Director (builder);
director.Construct ("普通地基","普通墙","普通屋顶");
House house = builder.Create ();
Debug.Log (house.ToString());
}
}
有时可以省略Director层:
public class RobotBuilder:Builder
{
House house = new House();
public override Builder BuildFoundation (string foundation)
{
house.Foundation = foundation;
return this;
}
public override Builder BuildWall (string wall)
{
house.Wall = wall;
return this;
}
public override Builder BuildRoof (string roof)
{
house.Roof = roof;
return this;
}
public override House Create()
{
return house;
}
}
public class BuilderTest : MonoBehaviour {
private void Start () {
Builder builder = new RobotBuilder ();
House house = builder.BuildFoundation ("玻璃地基")
.BuildWall("玻璃墙")
.BuildRoof("玻璃屋顶")
.Create();
Debug.Log (house.ToString());
}
}
总结:
建造者模式用于组装对象,简化复杂对象的子部件构造过程