自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

理解軟件設(shè)計(jì)模式中的建造者模式

開發(fā) 項(xiàng)目管理
設(shè)計(jì)模式是很多程序員關(guān)注的焦點(diǎn),今天我們就來(lái)介紹軟件設(shè)計(jì)模式中的建造者模式。

  4個(gè)角色:指揮者(Director),建造者(Builder),具體建造者(ConcreteBuilder),產(chǎn)品(Product)

  產(chǎn)品:需要?jiǎng)?chuàng)建的對(duì)象產(chǎn)品

  具體建造者:創(chuàng)建產(chǎn)品的實(shí)例并且實(shí)現(xiàn)建造者多個(gè)方法對(duì)產(chǎn)品進(jìn)行裝配

  建造者:本質(zhì)為抽象類,里面的抽象方法供具體建造者重寫,聲明產(chǎn)品的引用

  指揮者:調(diào)用建造者抽象類以及其方法

  實(shí)現(xiàn)思路:客戶端創(chuàng)建一個(gè)指揮者,并且實(shí)例化需要的產(chǎn)品的具體建造者,然后指揮者調(diào)用具體建造者的實(shí)例即將產(chǎn)品生產(chǎn)出來(lái)。

  類圖:

  

  應(yīng)用場(chǎng)景:在Silverlight中我們需要生產(chǎn)一列多行的輸入框+TextBlock的組合,但是這些輸入框的類型不同,有一些只能輸入256個(gè)字符,有的只能輸入20個(gè)字符,還有的是多行的,有的是單行的輸入框。這些輸入框的種類是固定的,但是可能用戶自定義輸入框的時(shí)候我們生成的順序和各自的生成數(shù)量不知道。

  分析:在這里產(chǎn)品是固定的,有A,B,C,D,E,F六種輸入框+TextBlock,用戶可能生成的情況是A,A,C,C,B,B,C、也可能是B,C,D,B,C,F。這里我們使用建造者模式,這幾種輸入框基本上都差不多,都是TextBlock+TextBox的模式。但是可輸入數(shù)量和是否多行是不定的,那么我們實(shí)現(xiàn)AConcreteBuilder,BConcreteBuilder,CConcreteBuilder,DConcreteBuilder,

EConcreteBuilder,FConcreteBuilder等多個(gè)具體建造者,然后對(duì)于建造者中只需要兩個(gè)方法分別實(shí)例化產(chǎn)品,并且對(duì)產(chǎn)品的屬性(可輸入字符數(shù)、是否可多行)進(jìn)行設(shè)置,然后再用戶需要調(diào)用什么產(chǎn)品的時(shí)候,使用指揮者調(diào)用想要的ConcreteBuilder具體建造者即可。

  下面我們以一個(gè)電腦產(chǎn)品生產(chǎn)的實(shí)例來(lái)具體看看Builder Pattern是如何使用的:

一、產(chǎn)品角色

  1. //產(chǎn)品  
  2.   classComputer  
  3. {privatestringm_CompName;privatestringm_MemorySize;privatestringm_DiskSize;///<summary>  
  4.   ///電腦名稱///</summary>  
  5.   publicstringCompName  
  6.   {get{ returnm_CompName; }set{ m_CompName =value; }  
  7.   }///<summary>  
  8.   ///內(nèi)存大小///</summary>  
  9.   publicstringMemorySize  
  10.   {get{ returnm_MemorySize; }set{ m_MemorySize =value; }  
  11.   }///<summary>  
  12.   ///硬盤大小///</summary>  
  13.   publicstringDiskSize  
  14.   {get{ returnm_DiskSize; }set{ m_DiskSize =value; }  
  15.   }///<summary>  
  16.   ///顯示產(chǎn)品的信息///</summary>  
  17.   publicvoidShowComputerInfo()  
  18.   {  
  19.   Console.WriteLine("------------------------");  
  20.   Console.WriteLine("電腦名稱:"+CompName);  
  21.   Console.WriteLine("內(nèi)存大?。?quot;+MemorySize);  
  22.   Console.WriteLine("硬盤大?。?quot;+DiskSize);  
  23.   }  
  24.   } 

二、建造者角色

  1.   //建造者 定義建造產(chǎn)品的抽象方法和產(chǎn)品的引用  
  2.   abstractclassComputerBuilder  
  3.   {privateComputer computerInstance;///<summary>  
  4.   ///返回建立的電腦產(chǎn)品實(shí)例///</summary>  
  5.   publicComputer ComputerInstance  
  6.   {get{ returncomputerInstance; }set{ computerInstance=value; }  
  7.   }///<summary>  
  8.   ///創(chuàng)建電腦名稱///</summary>  
  9.   abstractpublicvoidCreateCompName();///<summary>  
  10.   ///創(chuàng)建電腦內(nèi)存///</summary>  
  11.   abstractpublicvoidCreateCompMemory();///<summary>  
  12.   ///創(chuàng)建電腦硬盤///</summary>  
  13.   abstractpublicvoidCreateCompDisk();  
  14.   } 

三、具體建造者角色

  1.   //具體建造者創(chuàng)建蘋果電腦  
  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.   }//具體建造者創(chuàng)建戴爾電腦  
  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.   }//具體建造者創(chuàng)建惠普電腦  
  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.   }//具體建造者創(chuàng)建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.   {///<summary>  
  4.   ///調(diào)用建造者抽象方法以生產(chǎn)產(chǎn)品///</summary>  
  5.   ///<param name="compBuilder"></param>  
  6.   publicvoidCreateComputer(ComputerBuilder compBuilder)  
  7.   {  
  8.   compBuilder.CreateCompName();  
  9.   compBuilder.CreateCompMemory();  
  10.   compBuilder.CreateCompDisk();  
  11.   }  
  12.  } 

如需源碼請(qǐng)點(diǎn)擊 BuilderPattern.zip下載。

原文鏈接:http://www.cnblogs.com/chengxingliang/archive/2011/07/14/2105119.html

【編輯推薦】

  1. 新手軟件項(xiàng)目經(jīng)理該如何入門
  2. 項(xiàng)目經(jīng)理的力量應(yīng)該從哪里來(lái)?
  3. 當(dāng)你從程序員變?yōu)轫?xiàng)目經(jīng)理
  4. 軟件測(cè)試項(xiàng)目為什么會(huì)失敗
  5. 項(xiàng)目管理之CVS與SVN日常使用總結(jié)

 

責(zé)任編輯:彭凡 來(lái)源: 博客園
相關(guān)推薦

2019-08-12 14:45:50

軟件設(shè)計(jì)Java

2021-04-14 09:02:22

模式 設(shè)計(jì)建造者

2020-10-20 13:33:00

建造者模式

2021-10-26 00:21:19

設(shè)計(jì)模式建造者

2021-01-21 05:34:14

設(shè)計(jì)模式建造者

2024-02-19 08:38:34

建造者模式Android設(shè)計(jì)模式

2010-08-11 09:15:07

設(shè)計(jì)模式Python

2012-12-25 09:38:41

JavaScript設(shè)計(jì)模式

2022-09-19 06:25:14

設(shè)計(jì)模式GoF

2022-11-01 15:25:01

構(gòu)建者模式Go 語(yǔ)言

2023-10-19 13:43:00

設(shè)計(jì)模式軟件設(shè)計(jì)

2013-06-07 11:31:36

面向?qū)ο?/a>設(shè)計(jì)模式

2021-06-10 19:09:05

模式代碼建造者

2021-05-11 08:54:59

建造者模式設(shè)計(jì)

2025-04-25 08:23:20

2011-07-21 14:33:02

設(shè)計(jì)模式

2020-11-05 09:38:07

中介者模式

2021-07-28 10:02:54

建造者模式代碼

2023-05-26 08:41:23

模式Go設(shè)計(jì)模式

2020-12-01 07:16:05

重學(xué)設(shè)計(jì)模式
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)