建造者模式
1.URL类图

这次牵涉到的类比较多 还是有必要说明一下的
一个套餐也就是Meal呢 是由几部分组成的
这几部分是Part
饮料、汉堡、薯条都是Part
M代表麦当劳 KFC就是肯德基了
2.核心代码
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace fd 7 { 8 class Customer 9 { 10 static void Main(string[] args) 11 { 12 MealKFCBuilder kfcBuilder = new MealKFCBuilder(); 13 MealDirector kfcDirector = new MealDirector(kfcBuilder); 14 kfcDirector.CreateMeal().Make(); 15 Console.Read(); 16 } 17 } 18 }
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace fd 7 { 8 9 class DefinitePart 10 { 11 } 12 13 public class KFCChips : part 14 { 15 public override void Make() 16 { 17 Console.WriteLine("KFC薯条制作完成"); 18 } 19 } 20 21 public class MChips : part 22 { 23 public override void Make() 24 { 25 Console.WriteLine("麦当劳薯条制作完成"); 26 } 27 } 28 29 public class KFCBuger : part 30 { 31 public override void Make() 32 { 33 Console.WriteLine("KFC汉堡制作完成"); 34 } 35 } 36 37 public class MBuger : part 38 { 39 public override void Make() 40 { 41 Console.WriteLine("麦当劳汉堡制作完成"); 42 } 43 } 44 45 public class KFCDrink : part 46 { 47 public override void Make() 48 { 49 Console.WriteLine("KFC饮料制作完成"); 50 } 51 } 52 53 public class MDrink : part 54 { 55 public override void Make() 56 { 57 Console.WriteLine("麦当劳饮料制作完成"); 58 } 59 } 60 }
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace fd 7 { 8 9 public class Meal 10 { 11 protected List<part> _parts = new List<part>(); 12 13 public void AddPart(part part) 14 { 15 _parts.Add(part); 16 } 17 18 public void Make() 19 { 20 foreach (part part in _parts) 21 { 22 part.Make(); 23 } 24 } 25 } 26 }
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace fd 7 { 8 public abstract class MealBuilder 9 { 10 protected Meal _meal = new Meal(); 11 12 public abstract void BuildBuger(); 13 public abstract void BuildChips(); 14 public abstract void buildDrink(); 15 16 public Meal GetMeal() 17 { 18 return _meal; 19 } 20 } 21 22 }
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace fd 7 { 8 public class MealDirector 9 { 10 private MealBuilder _mealbuilder; 11 12 public MealDirector(MealBuilder mealbuilder) 13 { 14 _mealbuilder = mealbuilder; 15 } 16 17 public Meal CreateMeal() 18 { 19 _mealbuilder.BuildBuger(); 20 _mealbuilder.BuildChips(); 21 _mealbuilder.buildDrink(); 22 23 return _mealbuilder.GetMeal(); 24 } 25 } 26 }
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace fd 7 { 8 public class MealKFCBuilder:MealBuilder 9 { 10 public override void BuildBuger() 11 { 12 _meal.AddPart(new KFCBuger()); 13 } 14 15 public override void BuildChips() 16 { 17 _meal.AddPart(new KFCChips()); 18 } 19 20 public override void buildDrink() 21 { 22 _meal.AddPart(new KFCDrink()); 23 } 24 25 } 26 }
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace fd 7 { 8 public class MealMBuilder:MealBuilder 9 { 10 public override void BuildBuger() 11 { 12 _meal.AddPart(new MBuger()); 13 } 14 15 public override void BuildChips() 16 { 17 _meal.AddPart(new MChips()); 18 } 19 20 public override void buildDrink() 21 { 22 _meal.AddPart(new MDrink()); 23 } 24 } 25 }
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace fd 7 { 8 public abstract class part 9 { 10 public abstract void Make(); 11 } 12 }
3.view on github
https://github.com/mengx8/test
浙公网安备 33010602011771号