技术开发 频道

创建型模式篇-建造者模式(Builder Pattern)


在这里我们还是以去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


0
相关文章