![[23种设计模式汇总]设计模式_建造者模式.doc_第1页](http://file.renrendoc.com/FileRoot1/2020-1/14/9c730698-b1c4-431f-97e1-3a871c8f651b/9c730698-b1c4-431f-97e1-3a871c8f651b1.gif)
![[23种设计模式汇总]设计模式_建造者模式.doc_第2页](http://file.renrendoc.com/FileRoot1/2020-1/14/9c730698-b1c4-431f-97e1-3a871c8f651b/9c730698-b1c4-431f-97e1-3a871c8f651b2.gif)
![[23种设计模式汇总]设计模式_建造者模式.doc_第3页](http://file.renrendoc.com/FileRoot1/2020-1/14/9c730698-b1c4-431f-97e1-3a871c8f651b/9c730698-b1c4-431f-97e1-3a871c8f651b3.gif)
![[23种设计模式汇总]设计模式_建造者模式.doc_第4页](http://file.renrendoc.com/FileRoot1/2020-1/14/9c730698-b1c4-431f-97e1-3a871c8f651b/9c730698-b1c4-431f-97e1-3a871c8f651b4.gif)
![[23种设计模式汇总]设计模式_建造者模式.doc_第5页](http://file.renrendoc.com/FileRoot1/2020-1/14/9c730698-b1c4-431f-97e1-3a871c8f651b/9c730698-b1c4-431f-97e1-3a871c8f651b5.gif)
已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
设计模式建造者模式4个角色:指挥者(Director),建造者(Builder),具体建造者(ConcreteBuilder),产品(Product) 产品:需要创建的对象产品 具体建造者:创建产品的实例并且实现建造者多个方法对产品进行装配 建造者:本质为抽象类,里面的抽象方法供具体建造者重写,声明产品的引用 指挥者:调用建造者抽象类以及其方法实现思路:客户端创建一个指挥者,并且实例化需要的产品的具体建造者,然后指挥者调用具体建造者的实例即将产品生产出来。类图:应用场景:在Silverlight中我们需要生产一列多行的输入框+TextBlock的组合,但是这些输入框的类型不同,有一些只能输入256个字符,有的只能输入20个字符,还有的是多行的,有的是单行的输入框。这些输入框的种类是固定的,但是可能用户自定义输入框的时候我们生成的顺序和各自的生成数量不知道。分析:在这里产品是固定的,有A,B,C,D,E,F六种输入框+TextBlock,用户可能生成的情况是A,A,C,C,B,B,C、也可能是B,C,D,B,C,F。这里我们使用建造者模式,这几种输入框基本上都差不多,都是TextBlock+TextBox的模式。但是可输入数量和是否多行是不定的,那么我们实现AConcreteBuilder,BConcreteBuilder,CConcreteBuilder,DConcreteBuilder,EConcreteBuilder,FConcreteBuilder等多个具体建造者,然后对于建造者中只需要两个方法分别实例化产品,并且对产品的属性(可输入字符数、是否可多行)进行设置,然后再用户需要调用什么产品的时候,使用指挥者调用想要的ConcreteBuilder具体建造者即可。下面我们以一个电脑产品生产的实例来具体看看Builder Pattern是如何使用的:一、产品角色/产品class Computerprivate string m_CompName;private string m_MemorySize;private string m_DiskSize;/ / 电脑名称/ public string CompNameget return m_CompName; set m_CompName = value; / / 内存大小/ public string MemorySizeget return m_MemorySize; set m_MemorySize = value; / / 硬盘大小/ public string DiskSizeget return m_DiskSize; set m_DiskSize = value; / / 显示产品的信息/ public void ShowComputerInfo()Console.WriteLine(-);Console.WriteLine(电脑名称: + CompName);Console.WriteLine(内存大小: + MemorySize);Console.WriteLine(硬盘大小: + DiskSize);复制代码二、建造者角色/建造者 定义建造产品的抽象方法和产品的引用abstract class ComputerBuilderprivate Computer computerInstance;/ / 返回建立的电脑产品实例/ public Computer ComputerInstanceget return computerInstance; set computerInstance=value; / / 创建电脑名称/ abstract public void CreateCompName();/ / 创建电脑内存/ abstract public void CreateCompMemory();/ / 创建电脑硬盘/ abstract public void CreateCompDisk();复制代码三、具体建造者角色/具体建造者创建苹果电脑class AppleConcreteBuilder : ComputerBuilderpublic override void CreateCompName()ComputerInstance = new Computer();ComputerInstance.CompName = 苹果电脑;public override void CreateCompMemory()ComputerInstance.MemorySize = 4G;public override void CreateCompDisk()ComputerInstance.DiskSize = 500G;/具体建造者创建戴尔电脑class DellConcreteBuilder : ComputerBuilderpublic override void CreateCompName()ComputerInstance = new Computer();ComputerInstance.CompName = 戴尔电脑;public override void CreateCompMemory()ComputerInstance.MemorySize = 2GB;public override void CreateCompDisk()ComputerInstance.DiskSize = 320GB;/具体建造者创建惠普电脑class HpConcreteBuilder : ComputerBuilderpublic override void CreateCompName()ComputerInstance = new Computer();ComputerInstance.CompName = 惠普电脑;public override void CreateCompMemory()ComputerInstance.MemorySize = 1GB;public override void CreateCompDisk()ComputerInstance.DiskSize = 160GB;/具体建造者创建IBM电脑class IBMConcreteBuilder : ComputerBuilderpublic override void CreateCompName()ComputerInstance = new Computer();ComputerInstance.CompName = IBM电脑;public override void CreateCompMemory()ComputerInstance.MemorySize = 2G;public override void CreateCompDisk()ComputerInstance.DiskSize = 1000G;复制代码四、指挥者角色/指挥者class CreateDirector/ / 调用建造者抽象方
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论