using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;
namespace 建造者模式 { public class Product { IList parts = new List();
public void Add(string part) { parts.Add(part); }
public void Show() { Console.WriteLine("\n产品 创建--------"); foreach (string part in parts) { Console.WriteLine(part); } } }
public abstract class Builder { public abstract void BuildPartA(); public abstract void BuildPartB(); public abstract Product GetResult(); }
public class ConcreteBuilder1 : Builder { private Product product = new Product();
public override void BuildPartA() { product.Add("部件A"); }
public override void BuildPartB() { product.Add("部件B"); }
public override Product GetResult() { return product; } }
public class ConcreteBuilder2 : Builder { private Product product = new Product();
public override void BuildPartA() { product.Add("部件X"); }
public override void BuildPartB() { product.Add("部件Y"); }
public override Product GetResult() { return product; } }
public class Director { public void Construct(Builder builder) { builder.BuildPartA(); builder.BuildPartB(); } } }
客户端:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;
namespace 建造者模式 { class Program { static void Main(string[] args) { Director director = new Director(); Builder b1 = new ConcreteBuilder1(); Builder b2 = new ConcreteBuilder2();
using UnityEngine; using System.Collections; using UnityEngine.UI; public class UIView { protected Text mText; protected Text mBtnText; protected Image mImage;
using UnityEngine; using System.Collections; using System.Collections.Generic; public abstract class Builder : UIView { public abstract void BuilderMethodA(); // protected abstract void BuilderMethodB(); public abstract Product GetResult(); }
public class Product { List parts = new List();
public void Add(UIView go) { if (go is ConcreteBuilder1) parts.Add(go as ConcreteBuilder1); if (go is ConcreteBuilder2) parts.Add(go as ConcreteBuilder2); }
public void Show() { foreach (UIView go in parts) { if(go is ConcreteBuilder1) { ConcreteBuilder1 b1 = go as ConcreteBuilder1; b1.BuilderMethodA(); } if(go is ConcreteBuilder2) { (go as ConcreteBuilder2).BuilderMethodA(); } } } }
public class Director { public void Construct(Builder builder) { builder.BuilderMethodA(); } }
using UnityEngine; using System.Collections;
public class ConcreteBuilder1 : Builder { private Product product = new Product(); public override void BuilderMethodA() { mText.text = "建造者A"; mBtnText.text = "建造者A按钮"; mImage.color = Color.red; }
public override Product GetResult() { return product; } }
public class ConcreteBuilder2 : Builder { private Product product = new Product(); public override void BuilderMethodA() { mText.text = "建造者B"; mBtnText.text = "建造者B按钮"; mImage.color = Color.green; }
public override Product GetResult() { return product; } }
Test.cs
using UnityEngine; using System.Collections;
public class Test : MonoBehaviour {
void OnGUI() { if(GUI.Button(new Rect(100, 100, 120, 50), "按钮1")) { Director director = new Director(); Builder b1 = new ConcreteBuilder1();