2023年全國(guó)碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩16頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、生成器(builder )模式,1.什么是生成器模式2.在什么情況下用生成器模式3. 例子4.模型圖5. Builder模式的要點(diǎn)6.Builder與Abstract Factory的區(qū)別7.小結(jié),Builder的概念,概述: 在軟件系統(tǒng)中,有時(shí)候面臨著“一個(gè)復(fù)雜對(duì)象”的創(chuàng)建工作,其通常由各個(gè)部分的子對(duì)象用一定的算法構(gòu)成;由于需求的變化,這個(gè)復(fù)雜對(duì)象的各個(gè)部分經(jīng)常面臨著劇烈的變化,但是將它們組合在一起的算法確相對(duì)

2、穩(wěn)定。如何應(yīng)對(duì)這種變化?如何提供一種“封裝機(jī)制”來隔離出“復(fù)雜對(duì)象的各個(gè)部分”的變化,從而保持系統(tǒng)中的“穩(wěn)定構(gòu)建算法”不隨著需求改變而改變?這就是要說的建造者模式。意圖: 將一個(gè)復(fù)雜的構(gòu)建與其表示相分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。,案例:,在肯德基店子里面,顧客在點(diǎn)各自需要的食物和套餐??系禄趺磻?yīng)對(duì)不同的顧客要的不同的套餐呢?。比如說:肯德基豪華午餐:包括一個(gè)主食,一個(gè)輔食,一杯飲料(例如新奧爾良烤雞腿堡

3、+新奧爾良烤翅(2塊)+百事可樂(中) )。這些在不同的豪華午餐中可以是不同的,但是組合成豪華午餐的過程是相同的。無論顧客點(diǎn)的是漢堡,三名治還是雞肉,過程都是一樣的。柜臺(tái)的員工直接把主食,輔食。這些是放在一個(gè)袋子中的。飲料被倒入杯中,放在袋子外邊。這些過程在相互競(jìng)爭(zhēng)的餐館中是同樣的。,客戶端:顧客。想去買一套套餐(這里面包括漢堡,可樂,薯?xiàng)l),可以有1號(hào)和2號(hào)兩種套餐供顧客選擇。指導(dǎo)者角色:收銀員。知道顧客想要買什么樣的套餐,并告訴餐

4、館員工去準(zhǔn)備套餐。建造者角色:餐館員工。按照收銀員的要求去準(zhǔn)備具體的套餐,分別放入漢堡,可樂,薯?xiàng)l等。產(chǎn)品角色:最后的套餐,所有的東西放在同一個(gè)盤子里面。下面開始我們的買套餐過程。 有圖有真相~嘻嘻。。。,,,,,,,,,產(chǎn)品(套餐)類:using System;using System.Collections.Generic;using System.Text;using System.Col

5、lections;namespace ConsoleDesignPattern{    public class Food    {        Hashtable food = new Hashtable();       

6、 /// 添加食品        public void Add(string strName,string strPrice)        {            food.Ad

7、d(strName,strPrice);        }        public void Show()        {        

8、;    IDictionaryEnumerator foodEnumerator = food.GetEnumerator();            Console.WriteLine("Food List:");     

9、;       Console.WriteLine("----------------------------------");            string strFoodList = "";  &

10、#160;         while(foodEnumerator.MoveNext())            {          

11、0;     strFoodList += "\n\n" + foodEnumerator.Key.ToString();                strFoodList += ":\t" + food

12、Enumerator.Value.ToString();            }            Console.WriteLine(strFoodList);    

13、;        Console.WriteLine("\n---------------------------------");        }    }},,2.指導(dǎo)者通知建造器。using System;using System.

14、Collections.Generic;using System.Text;namespace ConsoleDesignPattern{    ///     /// FoodManager類,即指導(dǎo)者    ///     public class FoodManager  &#

15、160; {        public void Construct(Builder builder)        {            builder.BuilderHamb

16、();            builder.BuilderCoke();            builder.BuilderChip();      

17、  }    }},,3.建造者處理指導(dǎo)者的要求,并將部件添加到產(chǎn)品中。using System;using System.Collections.Generic;using System.Text;namespace ConsoleDesignPattern{    ///     /// 抽象建造者類,構(gòu)造套餐&#

18、160;   ///    public abstract class Builder    {      ///       /// 添加漢堡      ///    

19、0;    public abstract void BuilderHamb();       ///        /// 添加可樂       ///      

20、60;  public abstract void BuilderCoke();        ///         /// 添加薯?xiàng)l        ///     &#

21、160;   public abstract void BuilderChip();       ///        /// 返回結(jié)果       ///       

22、/// 食品對(duì)象        public abstract Food GetFood();        }},,using System;using System.Collections.Generic;using System.Text;namespace ConsoleDes

23、ignPattern{    ///     /// 抽象建造者類,構(gòu)造套餐    ///    public abstract class Builder    {      ///     

24、  /// 添加漢堡      ///         public abstract void BuilderHamb();       ///        /// 添加可樂&

25、#160;      ///         public abstract void BuilderCoke();        ///         /// 添加薯?xiàng)l

26、        ///         public abstract void BuilderChip();       ///        /// 返回結(jié)果 

27、;      ///        /// 食品對(duì)象        public abstract Food GetFood();        }},,using System;

28、using System.Collections.Generic;using System.Text;namespace ConsoleDesignPattern{    public class GoldBuilder:Builder    {        private Food Gold

29、Food = new Food();        public override void BuilderHamb()        {            try &

30、#160;          {                GoldFood.Add("GoldHamb", "$23.25");  

31、;          }            catch (Exception ex)            { 

32、;               Console.WriteLine(ex);            }       

33、 }        public override void BuilderCoke()        {            try    

34、;        {                GoldFood.Add("GoldCoke", "$78.36");    

35、60;       }            catch (Exception ex)            {   

36、60;            Console.WriteLine(ex);            }        }  &

37、#160;     public override void BuilderChip()        {            try{      &#

38、160;            GoldFood.Add("GoldChip","$758.36");               } 

39、           catch (Exception ex)              {         

40、60;        Console.WriteLine(ex);              }        }    &

41、#160;   public override Food GetFood()        {            try         &

42、#160;  {                return GoldFood;            }     

43、;       catch(Exception ex)            {               &#

44、160;               Console.WriteLine(ex);                return null;

45、0;           }        }    }},,完整的客戶程序:using System;using System.Collections.Generic;using System.Text;using Syst

46、em.Configuration;using System.Reflection;namespace ConsoleDesignPattern{    ///     /// Client類    ///     public class Client    { 

47、;       static void Main(string[] args)        {            Console.WriteLine("Welcome to lea

48、rn about BuliderParrten");            FoodManager foodManager = new FoodManager();            Builder i

49、nstance;            Console.WriteLine("Please Enter Food NO:");            string NO = Console.Rea

50、dLine();            string foodType = ConfigurationSettings.AppSettings["NO"+NO];            insta

51、nce = (Builder)Assembly.Load("ConsoleDesignPattern").CreateInstance("ConsoleDesignPattern." + foodType);            foodManager.Construct(instan

52、ce);            Food food = instance.GetFood();            food.Show();      

53、      Console.ReadKey();        }    }},,6.Builder與Abstract Factory的區(qū)別 Builder強(qiáng)調(diào)整體是由部分組成的;而 Abstract Factory模式則并不強(qiáng)調(diào)這種關(guān)系,或者可以說是構(gòu)造上的‘松耦合’。

54、,Builder模式:1、使用Builder模式,是一個(gè)解耦的過程。2、復(fù)雜對(duì)象的構(gòu)建和它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。3、建造者模式的使用使得產(chǎn)品的內(nèi)部表象可以獨(dú)立的變化。使用建造者模式可以使客戶端不必知道產(chǎn)品內(nèi)部組成的細(xì)節(jié)。4、每一個(gè)Builder都相對(duì)獨(dú)立,而與其它的Builder無關(guān)。5、可使對(duì)構(gòu)造過程更加精細(xì)控制。6、將構(gòu)建代碼和表示代碼分開。7、建造者模式的缺點(diǎn)在于難于應(yīng)付“分步驟構(gòu)建算法”

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論