定义:
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
组成部分:
1、Builder:给出一个抽象接口,以规范产品对象的各个组成成分的建造。这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建。
2、ConcreteBuilder:实现Builder接口,针对不同的商业逻辑,具体化复杂对象的各部分的创建。 在建造过程完成后,提供产品的实例。
3、Director:调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建。
4、Product:所要创建的复杂对象。
示例代码:
/* 建造者模式:builder 简写为B,是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 Builder :Builder_B 类 ConcreteBuilder:FerrariBuilder_B 类,可扩展性体现在这里 Director:Director_B 类,设置建造的顺序 Product:Car_B 类,得到产品 */ public abstract class Builder_B { public abstract void BuildCarName (); public abstract void BuildCarDoor(); public abstract void BuildCarWindow(); public abstract void BuildCarWheel (); public abstract void BuildCarBody (); public abstract Car_B GetCar (); }
using UnityEngine; public class FerrariBuilder_B : Builder_B { private Car_B ferrari=new Car_B(); public override void BuildCarName () { ferrari.CarName = "法拉利"; } public override void BuildCarDoor () { Debug.Log ("给法拉利安装车门"); } public override void BuildCarWindow () { Debug.Log ("给法拉利安装车窗"); } public override void BuildCarWheel () { Debug.Log ("给法拉利安装车轱辘"); } public override void BuildCarBody () { Debug.Log ("生成出了一个法拉利车身"); } public override Car_B GetCar () { return ferrari; } }
using UnityEngine; public class Director_B { public void Construct(Builder_B builder) { Debug.Log ("我是总指挥,\n由我来决定所有车的组装顺序"); builder.BuildCarName (); builder.BuildCarBody (); builder.BuildCarWheel (); builder.BuildCarDoor (); builder.BuildCarWindow (); } }
using UnityEngine; public class Car_B { private string carName; public string CarName {get;set;} public void ShowCar() { Debug.Log (CarName+"组装好了"); } }
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Client_B : MonoBehaviour { void Update () { //调用 if (Input.GetKeyDown(KeyCode.F)) { Builder_B builder = new FerrariBuilder_B (); Director_B director = new Director_B (); director.Construct (builder); Car_B car = builder.GetCar (); car.ShowCar (); } } }