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()); } }总结: 建造者模式用于组装对象,简化复杂对象的子部件构造过程