预览加载中,请您耐心等待几秒...
1/8
2/8
3/8
4/8
5/8
6/8
7/8
8/8

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

HYPERLINK"http://bbs.51aspx.com/topictag-2024.aspx"设计模式HYPERLINK"http://bbs.51aspx.com/topictag-2033.aspx"建造者模式 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具体建造者即可。下面我们以一个电脑产品生产的实例来具体看看BuilderPattern是如何使用的:一、产品角色 //产品 classComputer { privatestringm_CompName; privatestringm_MemorySize; privatestringm_DiskSize; ///<summary> ///电脑名称 ///</summary> publicstringCompName { get{returnm_CompName;} set{m_CompName=value;} } ///<summary> ///内存大小 ///</summary> publicstringMemorySize { get{returnm_MemorySize;} set{m_MemorySize=value;} } ///<summary> ///硬盘大小 ///</summary> publicstringDiskSize { get{returnm_DiskSize;} set{m_DiskSize=value;} } ///<summary> ///显示产品的信息 ///</summary> publicvoidShowComputerInfo() { Console.WriteLine("------------------------"); Console.WriteLine("电脑名称:"+CompName); Console.WriteLine("内存大小:"+MemorySize); Console.WriteLine("硬盘大小:"+DiskSize); } } 复制代码 二、建造者角色 //建造者定义建造产品的抽象方法和产品的引用 abstractclassComputerBuilder { privateComputercomputerInstance; ///<summary> ///返回建立的电脑产品实例 ///</summary> publicComputerComputerInstance { get{returncomputerInstance;} set{computerInstance=value;} } ///<summary> ///创建电脑名称 ///</summary> abstractpublicvoidCreateCompName(); ///<summary> ///创建电脑内存 ///</summary> abstractpublicvoidCreateCompMemory(); ///<summary> ///创建电脑硬盘 ///</summary> abstractpublicvoid