建造者模式

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

posted @ 2015-12-31 14:19  mengx8  阅读(154)  评论(0)    收藏  举报