1 /* 2 * 建造者模式是一种创建型模式,它主要是应对项目中一些复杂对象的创建工作。 3 * 所谓“复杂对象”,是指此对象中还含有其它的子对象。 4 * 我们现在定义一个场景:汽车生产必须包含车轮(Wheel)、油箱(OilBox)和车身(Body), 5 * 应用建造者模式,用C#控制台应用程序实现该设计,构建BMW品牌和BenZ品牌汽车生产。 6 */ 7 using System; 8 using System.Collections.Generic; 9 using System.Linq; 10 using System.Text; 11 12 namespace Builder 13 { 14 class Car 15 { 16 IList<string> parts = new List<string>(); 17 public void Add(string part) 18 { 19 parts.Add(part); 20 } 21 public void Show() 22 { 23 Console.WriteLine("\n创建产品\nBegin"); 24 foreach (string part in parts) 25 { 26 Console.WriteLine("创建:"+part); 27 } 28 Console.WriteLine("End"); 29 } 30 } 31 abstract class Builder 32 { 33 public abstract void BuildWheel(); 34 public abstract void BuildOilBox(); 35 public abstract void BuildBody(); 36 public abstract Car GetProduct(); 37 } 38 class BMWBuilder : Builder 39 { 40 private Car car = new Car(); 41 public override void BuildWheel() 42 { 43 car.Add("BMW-Wheel"); 44 } 45 public override void BuildOilBox() 46 { 47 car.Add("BMW-OilBox"); 48 } 49 public override void BuildBody() 50 { 51 car.Add("BMW-Body"); 52 } 53 public override Car GetProduct() 54 { 55 return car; 56 } 57 58 } 59 class BenZBuilder : Builder 60 { 61 private Car car = new Car(); 62 public override void BuildWheel() 63 { 64 car.Add("BenZ-Wheel"); 65 } 66 public override void BuildOilBox() 67 { 68 car.Add("BenZ-OilBox"); 69 } 70 public override void BuildBody() 71 { 72 car.Add("BenZ-Body"); 73 } 74 public override Car GetProduct() 75 { 76 return car; 77 } 78 79 } 80 class Director 81 { 82 public void Construct(Builder bd) 83 { 84 bd.BuildWheel(); 85 bd.BuildOilBox(); 86 bd.BuildBody(); 87 } 88 } 89 class Program 90 { 91 static void Main(string[] args) 92 { 93 Director dt = new Director(); 94 Builder bmw = new BMWBuilder(); 95 Builder benz = new BenZBuilder(); 96 97 dt.Construct(bmw); 98 Car car1 = bmw.GetProduct(); 99 car1.Show(); 100 101 dt.Construct(benz); 102 Car car2 = benz.GetProduct(); 103 car2.Show(); 104 } 105 } 106 }
本文转自ZH奶酪博客园博客,原文链接:http://www.cnblogs.com/CheeseZH/archive/2012/05/14/2500717.html,如需转载请自行联系原作者