在这里我们还是以去KFC店买套餐为例子,示意图如下:

客户端:顾客。想去买一套套餐(这里面包括汉堡,可乐,薯条),可以有1号和2号两种套餐供顾客选择。
指导者角色:收银员。知道顾客想要买什么样的套餐,并告诉餐馆员工去准备套餐。
建造者角色:餐馆员工。按照收银员的要求去准备具体的套餐,分别放入汉堡,可乐,薯条等。
产品角色:最后的套餐,所有的东西放在同一个盘子里面。
下面开始我们的买套餐过程。
1.客户创建Derector对象,并用它所想要的Builder对象进行配置。顾客进入KFC店要买套餐,先找到一个收银员,相当于创建了一个指导者对象。这位收银员给出两种套餐供顾客选择:1普通套餐,2黄金套餐。完成的工作如时序图中红色部分所示。
程序实现:
产品(套餐)类:1using System;
2using System.Configuration;
3using System.Reflection;
4
5namespace KFC
6{
7 /**//// <summary>
8 /// Client 类
9 /// </summary>
10 public class Client
11 {
12 public static void Main(string[] args)
13 {
14 FoodManager foodmanager = new FoodManager();
15
16 Builder instance;
17
18 Console.WriteLine("Please Enter Food No:");
19
20 string No = Console.ReadLine();
21
22 string foodType = ConfigurationSettings.AppSettings["No"+No];
23
24 instance = (Builder)Assembly.Load("KFC").CreateInstance("KFC." + foodType);
25
26 foodmanager.Construct(instance);
27 }
28 }
29}
30
1using System;
2using System.Collections;
3
4namespace KFC
5{
6 /**//// <summary>
7 /// Food类,即产品类
8 /// </summary>
9 public class Food
10 {
11 Hashtable food = new Hashtable();
12
13 /**//// <summary>
14 /// 添加食品
15 /// </summary>
16 /// <param name="strName">食品名称</param>
17 /// <param name="Price">价格</param>
18 public void Add(string strName,string Price)
19 {
20 food.Add(strName,Price);
21 }
22
23 /**//// <summary>
24 /// 显示食品清单
25 /// </summary>
26 public void Show()
27 {
28 IDictionaryEnumerator myEnumerator = food.GetEnumerator();
29 Console.WriteLine("Food List:");
30 Console.WriteLine("------------------------------");
31 string strfoodlist = "";
32 while(myEnumerator.MoveNext())
33 {
34 strfoodlist = strfoodlist + "\n\n" + myEnumerator.Key.ToString();
35 strfoodlist = strfoodlist + ":\t" +myEnumerator.Value.ToString();
36 }
37 Console.WriteLine(strfoodlist);
38 Console.WriteLine("\n------------------------------");
39 }
40 }
41}
42