using System; using System.Collections; using System.Collections.Generic; namespace BuilderFunc{ public class Product{ List<string> arrList = new List<string>(); // First in First Out (FIFO) Queue Q = new Queue(); // Last in First out (LIFO) Stack S = new Stack(); public void Add(string param) { arrList.Add(param); } public void AddEvent(EventArgs e) { Q.Enqueue(e); } public void Show() { Console.WriteLine("\nProduct Param -------"); foreach (string part in arrList) Console.WriteLine(part); foreach (EventArgs e in Q) Console.WriteLine(e); } } public abstract class AbstractBuilder{ public abstract void BuilderProductA(); public abstract void BuilderProductB(); public abstract Product GetResult(); } public class ConcreteBuilder1 : AbstractBuilder{ private Product product = new Product(); public override void BuilderProductA(){ product.Add(this.ToString() + " : BuilderProductA"); } public override void BuilderProductB(){ product.Add(this.ToString() + " : BuilderProductB"); } public override Product GetResult(){ return product; } } public class Director{ public static void CreateBuilder(AbstractBuilder abstractBuilder) { abstractBuilder.BuilderProductA(); abstractBuilder.BuilderProductB(); } } public class EntryPoint{ public static void Main(string[] args){ AbstractBuilder absBuilder = new ConcreteBuilder1(); Director.CreateBuilder(absBuilder); Product p1 = absBuilder.GetResult(); p1.Show(); Console.Read(); } } }