版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、學(xué)生姓名 學(xué) 號(hào) 院 系 專 業(yè) 年 級(jí)&九k學(xué)題目:抽象工廠模式張 婧201021077信息科學(xué)與技術(shù)學(xué)院計(jì)算機(jī)應(yīng)用技術(shù)2010 級(jí)抽象工廠模式在軟件系統(tǒng)中,經(jīng)常面臨著“一系列相互依賴的對(duì)象”的創(chuàng)建工作;同時(shí)由 于需求的變化,往往存在著更多系列對(duì)象的創(chuàng)建工作。 如何應(yīng)對(duì)這種變化?如何 繞過常規(guī)的對(duì)象的創(chuàng)建方法(new),提供一種“封裝機(jī)制”來(lái)避免客戶程序和 這種“多系列具體對(duì)象創(chuàng)建工作”的緊耦合?這就要用到抽象工廠模式。抽象工 廠模式是簡(jiǎn)單工廠模式和工廠方法模式的升級(jí)版,它有更大的靈活性,同時(shí)也更加復(fù)雜一些。為了理解抽象工廠,我們考慮這樣一個(gè)實(shí)際例子:如果你想吃飯了,怎么辦自 己做嗎
2、?自己做就相當(dāng)于程序中直接使用 new。當(dāng)然是自己下個(gè)指令,別人來(lái)做 更爽。那就把做飯的任務(wù)交給廚師吧,那么他就是一個(gè)做飯的工廠了,你告訴他 要吃紅燒肉,等會(huì)他就從廚房給你端出來(lái)一盤香噴噴的紅燒肉了,再來(lái)個(gè)清蒸魚吧。下圖1就是這個(gè)問題的模型。會(huì)物1J-11 .!廚師圖1顯然到了這里,你是 Client ,廚師就是工廠,他擁有做紅燒肉的方法, 做清蒸魚的方法,這些方法返回值就是食物抽象。紅燒肉、清蒸魚就是食物的繼 承類,簡(jiǎn)單工廠模式也成型了。簡(jiǎn)單工廠模式結(jié)構(gòu)圖2優(yōu)點(diǎn):允許客戶端相對(duì)獨(dú)立的創(chuàng)建產(chǎn)品的過程, 并且在系統(tǒng)引入新產(chǎn)品的時(shí)候無(wú) 需修改客戶端。缺點(diǎn):對(duì)修改不封閉,新增加產(chǎn)品您要修改工廠。違法
3、了開閉法則(OCP。工廠方法模式生活例子:廚師手藝再好,總有不會(huì)做的菜,你想吃回鍋肉,怎么辦,讓廚師學(xué)唄,于 是就給他新增了做回鍋肉的方法,以后你再想吃一個(gè)新菜,就要給廚師新加一個(gè) 方法,顯然此做法的缺點(diǎn)也就暴露出來(lái)了,用程序設(shè)計(jì)的描述就是對(duì)修改永遠(yuǎn)不 能封閉。面對(duì)上面對(duì)修改不能封閉的問題,有沒有好的解決方案嗎?把廚師抽象變 成一個(gè)基類,你請(qǐng)幾個(gè)具體的廚師,分別有做清蒸魚的,做紅燒肉的廚師,如果 你想吃一個(gè)新菜,就再新找個(gè)廚師,從你的廚師基類繼承一下,讓他來(lái)做這個(gè)新 菜。現(xiàn)在來(lái)看這個(gè)模式發(fā)生了變化,結(jié)構(gòu)中多了一個(gè)廚師的抽象,抽象并不具體 的加工產(chǎn)品了,至于做什么,是由這個(gè)抽象工廠的繼承子類來(lái)實(shí)
4、現(xiàn), 現(xiàn)在的模式 也就變成工廠方法模式了,這個(gè)上面的結(jié)構(gòu)圖 1就變成了下面的圖3的結(jié)構(gòu)了。l».JL詢出I| 工 i L d 1h() 白 Vf現(xiàn)在再來(lái)分析現(xiàn)在的模式,顯然簡(jiǎn)單工廠的缺陷解決了,新增加一個(gè)菜只需要新增加一個(gè)廚師就行了,原來(lái)的廚師還在做原來(lái)的工作,這樣你的設(shè)計(jì)就對(duì) 修改封閉了。工廠方法模式結(jié)構(gòu)FAiTirttAi/Tfoit廠啟* 姑i .?) ,j 優(yōu)點(diǎn):優(yōu)化簡(jiǎn)單工廠模式,做到“開-閉”原則??勺龅桨丫唧w的產(chǎn)品創(chuàng)建過程 延遲到具體的子類工廠。缺點(diǎn):對(duì)于創(chuàng)建不同系列的產(chǎn)品無(wú)能為力。抽象工廠模式生活例子你發(fā)現(xiàn)菜可分成許多菜系,魯菜、粵菜、湘菜等等,它們各有各的風(fēng)味,同 樣
5、是紅燒肉由不同菜系出來(lái)的味道也各不相同。 如果你的廚師都是魯菜風(fēng)味,廣 東的朋友來(lái)了吃不慣,怎么辦?現(xiàn)在我們?cè)倩氐胶?jiǎn)單工廠模式,我們把紅燒肉再向下繼承,生成魯菜紅燒肉、 粵菜紅燒肉、湘菜紅燒肉;清蒸魚向下繼承為魯菜清蒸魚、粵菜清蒸魚、湘菜清 蒸魚。我們也修改一下廚師這個(gè)類,不讓其返回食物基類,而是返回紅燒肉、清 蒸魚、這一層次,并把這些方法抽象化,作為菜系工廠基類,然后再?gòu)拇嘶惱^ 承出,魯菜工廠、粵菜工廠、湘菜工廠等等,再由這些具體工廠實(shí)現(xiàn)創(chuàng)建具體菜 的工作。圖5現(xiàn)在可以看到,想新來(lái)做一個(gè)菜系,只需新聘請(qǐng)一個(gè)廚師就可以了,多么完美,但是你先別高興太早,如果你想新增加一個(gè)菜就變得非常困難了。抽
6、象工廠模式結(jié)構(gòu)抽象工廠模式代碼#in elude <iostream>#in elude <stri ng>using n amespaee std;/紅燒肉class CHon gshaoroupublic:virtual CH on gshaorou() ;/產(chǎn)品使用公共接口virtual void Start() = 0;/抽象基類,純虛函數(shù)由派生類去實(shí)現(xiàn);/魯菜紅燒肉class CHon gshaorouLucai : public CHon gshaoroupublic:CHon gshaorouLucai()cout << "制作魯菜紅
7、燒肉."<< endl;virtual CH on gshaorouLucai() ;virtual void Start()cout << "魯菜紅燒肉好了 ." << endl;/粵菜紅燒肉class CHon gshaorouYuecai : public CHon gshaoroupublic:CHon gshaorouYuecai()cout << "制作粵菜紅燒肉."<< endl;virtual CH on gshaorouYuecai() ;virtual void S
8、tart()cout << "粵菜紅燒肉好了 ." << endl;/清蒸魚class Cqin gzhe ngyupublic:virtual Cq in gzhe ngyu() ;/產(chǎn)品使用公共接口virtual void Start() = 0;/抽象基類,純虛函數(shù)由派生類去實(shí)現(xiàn);/魯菜清蒸魚class Cqin gzhe ngyuLucai : public Cqin gzhe ngyupublic:Cqin gzhe ngyuLucai()cout << "制作魯菜清蒸魚."<< endl;vir
9、tual Cq in gzhe ngyuLucai() ;virtual void Start()cout << "魯菜清蒸魚好了 ." << endl;/粵菜清蒸魚class Cqin gzhe ngyuYuecai : public Cqin gzhe ngyupublic:Cqin gzhe ngyuYuecai()cout << "制作粵菜清蒸魚."<< endl;virtual Cq in gzhe ngyuYuecai() ;virtual void Start()cout << &
10、quot;粵菜清蒸魚好了 ." << endl;;/抽象工廠class CFactorypublic:virtual CFactory();virtual CHon gshaorou* CreateH on gshaorou() = 0;virtual Cqin gzhe ngyu* Createq in gzhe ngyu() = 0;/魯菜工廠class CLucaiFactory : public CFactorypublic:CLucaiFactory()cout << " 制作魯菜工廠."<< endl;virtual
11、 CLucaiFactory();virtual CHon gshaorou* CreateH on gshaorou()retur n new CHon gshaorouLucai;virtual Cqin gzhe ngyu* Createq in gzhe ngyu()retur n new Cqin gzhe ngyuLucai;/粵菜工廠class CYuecaiFactory : public CFactorypublic:CYuecaiFactory()cout << "制作粵菜工廠."<< endl;virtual CYuecaiFa
12、ctory();virtual CHon gshaorou* CreateH on gshaorou()retur n new CHon gshaorouYuecai;virtual Cqin gzhe ngyu* Createq in gzhe ngyu()retur n new Cqin gzhe ngyuYuecai;void Test(CFactory* pFactory)CHon gshaorou* pHon gshaorou = NULL;制作紅燒肉制作清蒸魚Cqin gzhe ngyu* pqin gzhe ngyu = NULL;pHon gshaorou = pFactory
13、->CreateH on gshaorou();/ pqin gzhe ngyu = pFactory->Createq in gzhe ngyu(); pHon gshaorou->Start();pqi ngzhe ngyu->Start();delete pqin gzhe ngyu;delete pHon gshaorou;int main()CFactory* pFactory = NULL;/抽象工廠/魯菜工廠。做紅燒肉,清蒸魚pFactory = new CLucaiFactory;/ 制作魯菜工廠Test(pFactory);delete pFactory;cout«e ndl;/粵菜工廠。做紅燒肉,清蒸魚pFactory= new CYuecaiFactory;/制作粵菜工廠Test(pFactory);delete pFactory;system("pause");return 0;優(yōu)點(diǎn):將客戶端與具體的類分離。一個(gè)產(chǎn)品系列中的多個(gè)對(duì)象被設(shè)計(jì)在一起工作, 能保證客戶端始終只使用一個(gè)產(chǎn)品系列,且有利于更新產(chǎn)品系列。缺點(diǎn):難以支持新品種產(chǎn)品。抽象工廠模式與工廠方法模式的區(qū)別a重點(diǎn)不同。工廠方法模式強(qiáng)調(diào)的是不同的創(chuàng)建者根據(jù)自身需求去生產(chǎn)不同的 具體產(chǎn)品,重點(diǎn)是生產(chǎn)具體產(chǎn)品;而抽象工廠模式則定位為“在不指定
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版內(nèi)墻涂料產(chǎn)品生命周期評(píng)價(jià)與環(huán)保風(fēng)險(xiǎn)評(píng)估合同4篇
- 二零二五年度民商法擔(dān)保合同環(huán)保責(zé)任條款3篇
- 2025年鉆井工程地質(zhì)災(zāi)害預(yù)防合同3篇
- 二零二五年度太陽(yáng)能熱水器熱水系統(tǒng)節(jié)能改造技術(shù)咨詢合同
- 二零二五年度炊事員勞動(dòng)合同(含競(jìng)業(yè)禁止)3篇
- 二零二五年度互聯(lián)網(wǎng)醫(yī)院信息化建設(shè)合同4篇
- 2025版特色農(nóng)家樂項(xiàng)目投資租賃合同范本4篇
- 二零二五年度房地產(chǎn)經(jīng)紀(jì)服務(wù)合同:房地產(chǎn)公司與經(jīng)紀(jì)公司合作3篇
- 二零二五版美容美發(fā)行業(yè)安全責(zé)任與保險(xiǎn)合同4篇
- 二零二五年度新能源技術(shù)博士引進(jìn)與項(xiàng)目合作合同4篇
- 不同茶葉的沖泡方法
- 光伏發(fā)電并網(wǎng)申辦具體流程
- 建筑勞務(wù)專業(yè)分包合同范本(2025年)
- 企業(yè)融資報(bào)告特斯拉成功案例分享
- 五年(2020-2024)高考地理真題分類匯編(全國(guó)版)專題12區(qū)域發(fā)展解析版
- 《阻燃材料與技術(shù)》課件 第8講 阻燃木質(zhì)材料
- 低空經(jīng)濟(jì)的社會(huì)接受度與倫理問題分析
- GB/T 4732.1-2024壓力容器分析設(shè)計(jì)第1部分:通用要求
- 河北省保定市競(jìng)秀區(qū)2023-2024學(xué)年七年級(jí)下學(xué)期期末生物學(xué)試題(解析版)
- 2024年江蘇省勞動(dòng)合同條例
- 六編元代文學(xué)
評(píng)論
0/150
提交評(píng)論