理解软件设计模式中的建造者模式

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是如何使用的:

一、产品角色

 
 
 
 
  1. //产品  
  2.   classComputer  
  3. {privatestringm_CompName;privatestringm_MemorySize;privatestringm_DiskSize;///  
  4.   ///电脑名称///  
  5.   publicstringCompName  
  6.   {get{ returnm_CompName; }set{ m_CompName =value; }  
  7.   }///  
  8.   ///内存大小///  
  9.   publicstringMemorySize  
  10.   {get{ returnm_MemorySize; }set{ m_MemorySize =value; }  
  11.   }///  
  12.   ///硬盘大小///  
  13.   publicstringDiskSize  
  14.   {get{ returnm_DiskSize; }set{ m_DiskSize =value; }  
  15.   }///  
  16.   ///显示产品的信息///  
  17.   publicvoidShowComputerInfo()  
  18.   {  
  19.   Console.WriteLine("------------------------");  
  20.   Console.WriteLine("电脑名称:"+CompName);  
  21.   Console.WriteLine("内存大小:"+MemorySize);  
  22.   Console.WriteLine("硬盘大小:"+DiskSize);  
  23.   }  
  24.   } 

二、建造者角色

 
 
 
 
  1.   //建造者 定义建造产品的抽象方法和产品的引用  
  2.   abstractclassComputerBuilder  
  3.   {privateComputer computerInstance;///  
  4.   ///返回建立的电脑产品实例///  
  5.   publicComputer ComputerInstance  
  6.   {get{ returncomputerInstance; }set{ computerInstance=value; }  
  7.   }///  
  8.   ///创建电脑名称///  
  9.   abstractpublicvoidCreateCompName();///  
  10.   ///创建电脑内存///  
  11.   abstractpublicvoidCreateCompMemory();///  
  12.   ///创建电脑硬盘///  
  13.   abstractpublicvoidCreateCompDisk();  
  14.   } 

三、具体建造者角色

 
 
 
 
  1.   //具体建造者创建苹果电脑  
  2.   classAppleConcreteBuilder : ComputerBuilder  
  3.   {publicoverridevoidCreateCompName()  
  4.   {  
  5.   ComputerInstance =newComputer();  
  6.   ComputerInstance.CompName ="苹果电脑"}publicoverridevoidCreateCompMemory()  
  7.   {  
  8.   ComputerInstance.MemorySize ="4G"}publicoverridevoidCreateCompDisk()  
  9.   {  
  10.   ComputerInstance.DiskSize ="500G"}  
  11.   }//具体建造者创建戴尔电脑  
  12.   classDellConcreteBuilder : ComputerBuilder  
  13.   {publicoverridevoidCreateCompName()  
  14.   {  
  15.   ComputerInstance =newComputer();  
  16.   ComputerInstance.CompName ="戴尔电脑"}publicoverridevoidCreateCompMemory()  
  17.   {  
  18.   ComputerInstance.MemorySize ="2GB"}publicoverridevoidCreateCompDisk()  
  19.   {  
  20.   ComputerInstance.DiskSize ="320GB"}  
  21.   }//具体建造者创建惠普电脑  
  22.   classHpConcreteBuilder : ComputerBuilder  
  23.   {publicoverridevoidCreateCompName()  
  24.   {  
  25.   ComputerInstance =newComputer();  
  26.   ComputerInstance.CompName ="惠普电脑"}publicoverridevoidCreateCompMemory()  
  27.   {  
  28.   ComputerInstance.MemorySize ="1GB"}publicoverridevoidCreateCompDisk()  
  29.   {  
  30.   ComputerInstance.DiskSize ="160GB"}  
  31.   }//具体建造者创建IBM电脑  
  32.   classIBMConcreteBuilder : ComputerBuilder  
  33.   {publicoverridevoidCreateCompName()  
  34.   {  
  35.   ComputerInstance =newComputer();  
  36.   ComputerInstance.CompName ="IBM电脑"}publicoverridevoidCreateCompMemory()  
  37.   {  
  38.   ComputerInstance.MemorySize ="2G"}publicoverridevoidCreateCompDisk()  
  39.   {  
  40.   ComputerInstance.DiskSize ="1000G"}  
  41.   } 

四、指挥者角色

 
 
 
 
  1.   //指挥者  
  2.   classCreateDirector  
  3.   {///  
  4.   ///调用建造者抽象方法以生产产品///  
  5.   ///  
  6.   publicvoidCreateComputer(ComputerBuilder compBuilder)  
  7.   {  
  8.   compBuilder.CreateCompName();  
  9.   compBuilder.CreateCompMemory();  
  10.   compBuilder.CreateCompDisk();  
  11.   }  
  12.  } 

如需源码请点击 BuilderPattern.zip下载。

当前名称:理解软件设计模式中的建造者模式
链接分享:http://www.shufengxianlan.com/qtweb/news49/355749.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联