版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 用character builder創(chuàng)建交互反饋人物動(dòng)畫
- 創(chuàng)建型模式
- flash builder操作指南
- sopc_builder_log.txt
- sopc_builder_log.txt
- sopc_builder_log.txt
- 設(shè)計(jì)模式-裝飾者模式
- 創(chuàng)建型設(shè)計(jì)模式 培訓(xùn)英文
- 基于DSP Builder的混音算法研究.pdf
- 使用dsp_builder設(shè)計(jì)的dds
- 創(chuàng)建首都圈模式的戰(zhàn)略構(gòu)想
- 創(chuàng)建循環(huán)型工業(yè)管理模式
- 09 第9章 創(chuàng)建型模式
- 棉花高產(chǎn)創(chuàng)建技術(shù)模式圖目錄
- 水稻高產(chǎn)創(chuàng)建技術(shù)規(guī)范模式圖
- 玉米高產(chǎn)創(chuàng)建技術(shù)規(guī)范模式圖
- 跨國(guó)并購(gòu)與跨國(guó)創(chuàng)建模式比較
- 水稻高產(chǎn)創(chuàng)建技術(shù)規(guī)范模式圖
- 玉米高產(chǎn)創(chuàng)建技術(shù)規(guī)范模式圖
- 創(chuàng)建“數(shù)字信號(hào)處理”教學(xué)新模式
評(píng)論
0/150
提交評(píng)論