/*** * 建造者模式(Builder) * 将一个复杂的对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示。 * 使用建造者模式,客户端只需要指定建造的类型就可以得到他们,而建造的过程和细节 * 就不需要知道了。 * 注: * 个人理解,Builder模式就是在类和对象之间,再创建一个中间类(即Director),这个中间类负责控制每个对象具体执行的方法。 * 而在客户端只需要指定让谁去创建(Doing),就可以了,至于创建的方法它完全不需要知道。 */ using UnityEngine; using System.Collections; using System; public class BuilderModel : MonoBehaviour { private Dog dog; private Director director; // Use this for initialization void Start () { //cat = new Cat("Mao"); dog = new Dog("WangCai"); ///* *// director = new Director(dog); ///* 客户端只需要在这里告诉指挥者,需要创建一个什么类型的对象 *// } // Update is called once per frame void Update () { } void OnGUI() { if(GUI.Button(new Rect(0,0,100,50),"")) { director.Doing(); ///* 创建的过程和细节都是由Director类来完成,客户端无需了解 *// } } } /* 抽象的Builder类 */ abstract class Animal { protected string name; public Animal(string name) { this.name = name; } public abstract void Run(); public abstract void Call(); public abstract void Eat(); } /* ConcreteBuilder:具体建造者,实现Builder的各个接口,构造和装备各个部件 */ class Dog : Animal { public Dog(string name) : base(name) { } public override void Run() { //throw new NotImplementedException(); Debug.Log("I can run fast,beacase I am "+ this.name); } public override void Call() { //throw new NotImplementedException(); UnityEngine.Debug.Log("Wang wang!!!"); } public override void Eat() { //throw new NotImplementedException(); Debug.Log("I like eat beaf!!"); } } /* * Director类,在Builder模式中,负责控制行为流程,也负责隔离客户端和建造过程的关联 * 注:这里如果使用泛型的话,还可以最大化节省代码,增加灵活性。 * 例:private T t; * */ class Director { private Dog dog; public Director(Dog dog) { this.dog = dog; } public void Doing() { dog.Call(); dog.Eat(); dog.Run(); } } /* 何时使用? * 建造者模式主要用于创建一些复杂的对象,这些对象的内部构建间的建造顺序通常是稳定的, * 但对象内部的构建通常面临着复杂的变化。 * 由于组装过程是隐藏的,所以要改变一个产品的内部表示,再创建一个具体构造着就可以了。