创建者(builder)模式.pptx_第1页
创建者(builder)模式.pptx_第2页
创建者(builder)模式.pptx_第3页
创建者(builder)模式.pptx_第4页
创建者(builder)模式.pptx_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

生成器(builder )模式 1.什么是生成器模式 2.在什么情况下用生成器模式 3. 例子 4.模型图 5. Builder模式的要点 6.Builder与Abstract Factory的区别 7.小结 Builder的概念 概述: 在软件系统中,有时候面临着“一个复杂对 象”的创建工作,其通常由各个部分的子对象用一 定的算法构成;由于需求的变化,这个复杂对象的 各个部分经常面临着剧烈的变化,但是将它们组合 在一起的算法确相对稳定。如何应对这种变化?如 何提供一种“封装机制”来隔离出“复杂对象的各 个部分”的变化,从而保持系统中的“稳定构建算 法”不随着需求改变而改变?这就是要说的建造者 模式。 意图: 将一个复杂的构建与其表示相分离,使得同 样的构建过程可以创建不同的表示。 案例: 在肯德基店子里面,顾客在点各自需要 的食物和套餐。肯德基要怎么应对不同的 顾客要的不同的套餐呢? 。比如说:肯德基豪华午餐:包括一个主 食,一个辅食,一杯饮料(例如新奥尔良 烤鸡腿堡+新奥尔良烤翅(2块)+百事可乐( 中) )。这些在不同的豪华午餐中可以是 不同的,但是组合成豪华午餐的过程是相 同的。无论顾客点的是汉堡,三名治还是 鸡肉,过程都是一样的。柜台的员工直接 把主食,辅食。这些是放在一个袋子中 的。饮料被倒入杯中,放在袋子外边。这 些过程在相互竞争的餐馆中是同样的。 客户端:顾客。想去买一套套餐(这里面包括汉堡,可乐,薯条),可以有1号和2号 两种套餐供顾客选择。 指导者角色:收银员。知道顾客想要买什么样的套餐,并告诉餐馆员工去准备套餐。 建造者角色:餐馆员工。按照收银员的要求去准备具体的套餐,分别放入汉堡,可乐 ,薯条等。 产品角色:最后的套餐,所有的东西放在同一个盘子里面。 下面开始我们的买套餐过程。 有图有真相嘻嘻。 产品(套餐)类: using System; using System.Collections.Generic; using System.Text; using System.Collections; namespace ConsoleDesignPattern public class Food Hashtable food = new Hashtable(); / 添加食品 public void Add(string strName,string strPrice) food.Add(strName,strPrice); public void Show() IDictionaryEnumerator foodEnumerator = food.GetEnumerator(); Console.WriteLine(“Food List:“); Console.WriteLine(“-“); string strFoodList = “; while(foodEnumerator.MoveNext() strFoodList += “nn“ + foodEnumerator.Key.ToString(); strFoodList += “:t“ + foodEnumerator.Value.ToString(); Console.WriteLine(strFoodList); Console.WriteLine(“n-“); 2指导者通知建造器。 using System; using System.Collections.Generic; using System.Text; namespace ConsoleDesignPattern / / FoodManager类,即指导者 / public class FoodManager public void Construct(Builder builder) builder.BuilderHamb(); builder.BuilderCoke(); builder.BuilderChip(); 3建造者处理指导者的要求,并将部件添加到产品中。 using System; using System.Collections.Generic; using System.Text; namespace ConsoleDesignPattern / / 抽象建造者类,构造套餐 / public abstract class Builder / / 添加汉堡 / public abstract void BuilderHamb(); / / 添加可乐 / public abstract void BuilderCoke(); / / 添加薯条 / public abstract void BuilderChip(); / / 返回结果 / / 食品对象 public abstract Food GetFood(); using System; using System.Collections.Generic; using System.Text; namespace ConsoleDesignPattern / / 抽象建造者类,构造套餐 / public abstract class Builder / / 添加汉堡 / public abstract void BuilderHamb(); / / 添加可乐 / public abstract void BuilderCoke(); / / 添加薯条 / public abstract void BuilderChip(); / / 返回结果 / / 食品对象 public abstract Food GetFood(); using System; using System.Collections.Generic; using System.Text; namespace ConsoleDesignPattern public class GoldBuilder:Builder private Food GoldFood = new Food(); public override void BuilderHamb() try GoldFood.Add(“GoldHamb“, “$23.25“); catch (Exception ex) Console.WriteLine(ex); public override void BuilderCoke() try GoldFood.Add(“GoldCoke“, “$78.36“); catch (Exception ex) Console.WriteLine(ex); public override void BuilderChip() try GoldFood.Add(“GoldChip“,“$758.36“); catch (Exception ex) Console.WriteLine(ex); public override Food GetFood() try return GoldFood; catch(Exception ex) Console.WriteLine(ex); return null; 完整的客户程序: using System; using System.Collections.Generic; using System.Text; using System.Configuration; using System.Reflection; namespace ConsoleDesignPattern / / Client类 / public class Client static void Main(string args) Console.WriteLine(“Welcome to learn about BuliderParrten“); FoodManager foodManager = new FoodManager(); Builder instance; Console.WriteLine(“Please Enter Food NO:“); string NO = Console.ReadLine(); string foodType = ConfigurationSettings.AppSettings“NO“+NO; instance = (Builder)Assembly.Load(“ConsoleDesignPattern“).CreateInstance(“ConsoleDesig nPattern.“ + foodType); foodManager.Construct(instance); Food food = instance.GetFood(); food.Show(); Console.ReadKey(); 6.Builder与Abstract Factory的区别 Builder强调整体是由部分组成的;而 Abstract Factory模 式则并不强调这种关系,或者可以说是构造上的松耦合。 Builder模式: 1、使用Builder模式,是一个解耦的过程。 2、复杂对象的构建和它的表示分离,使得同样的 构建过程可以创建不同的表示。 3、建造者模式的使用使得产品的内部表象可以独 立的变化。使用建造者模式可以使客户端不必知道 产品内部组成的细节。 4、每一个Builder都相对独立,而与其它的Bui

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论