




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
軟件設(shè)計(jì)模式第二講抽象工廠模式抽象工廠模式名稱:抽象工廠模式(AbstractFactoryPattern)或Kit模式意圖:提供一系列相關(guān)或相互依賴對(duì)象的接口而無需指定他們具體的類。核心:抽象工廠模式(AbstractFactoryPattern)提供了一個(gè)接口,用于創(chuàng)建相關(guān)或者依賴對(duì)象的家族,而不需要指定具體實(shí)現(xiàn)類。抽象工廠模式允許客戶使用抽象接口來創(chuàng)建一組相關(guān)的產(chǎn)品,客戶類和工廠類分開,客戶需要任何產(chǎn)品的時(shí)候,只需要向工廠請(qǐng)求即可,客戶無須修改就可以獲得新產(chǎn)品。抽象工廠模式抽象工廠模式的動(dòng)機(jī)考慮一個(gè)支持多種視感(look-and-feel)表準(zhǔn)的用戶界面工具包,例如Motif和PresentationManager.不同的視感風(fēng)格為滾動(dòng)條、窗口和按鈕等用戶界面“窗口組件”定義不同的外觀和行為。為保證視感風(fēng)格標(biāo)準(zhǔn)間的可移植性,一個(gè)應(yīng)用不應(yīng)該為一個(gè)特定的視感外觀硬編碼它的窗口組建。在整個(gè)應(yīng)用中實(shí)例化特定視感風(fēng)格的窗口組件類將使得以后很難改變視感風(fēng)格。抽象工廠模式的動(dòng)機(jī)為解決這一問題,定義一個(gè)抽象的WidgetFactory類,這個(gè)類聲明了一個(gè)用來創(chuàng)建每一個(gè)類基本窗口組件的接口.每一類窗口組件都有一個(gè)抽象類,而具體子類則實(shí)現(xiàn)了窗口組件的特定視感風(fēng)格。對(duì)于一個(gè)抽象窗口組件類,WidgetFactory接口都有一個(gè)返回新窗口組件對(duì)象的操作??蛻粽{(diào)用這些操作以獲得窗口組件實(shí)例,但客戶并不知道他們正在使用的是哪些具體類。這樣客戶就不依賴于一般的視感風(fēng)格。抽象工廠模式的作用抽象工廠模式的類圖抽象工廠模式的類圖抽象工廠模式的時(shí)序圖抽象工廠模式的實(shí)例一抽象工廠模模式的實(shí)例例二大陸生態(tài)系系統(tǒng):已知?jiǎng)游锸朗澜缰懈鱾€(gè)個(gè)大陸的動(dòng)動(dòng)物是不同同的,例如如非洲有獅獅子和角馬馬,美洲有有狼和野牛牛。動(dòng)物可劃分分為食草和和食肉動(dòng)物物,獅子和和美洲狼屬屬于食肉動(dòng)動(dòng)物,而野野牛和角馬馬屬于食草草動(dòng)物。獅子捕食角角馬,美洲洲狼捕食野野牛。抽象工廠模模式的實(shí)例例二抽象工廠模模式的實(shí)例例三電腦生產(chǎn)::IBM,Dell都是著名的的計(jì)算機(jī)生生產(chǎn)廠家,,他們采用用的主板、、硬盤和CPU是不同的,,但主板、、硬盤和CPU之間一定要要兼容?,F(xiàn)硬盤有Maxtor和WestDigit兩種,CPU有AMD和Intel,主板有有MSI865PE和MSIK7N2G兩種。IBM采用Intel的CPU和WestDigit的硬盤,Dell采用AMD的CPU和Maxtor的硬盤。抽象工廠模模式的實(shí)例例三抽象工廠模模式的實(shí)例例三抽象工廠模模式的實(shí)例例三抽象工廠模模式的實(shí)例例三抽象工廠模模式的實(shí)例例三抽象工廠模模式的實(shí)例例三抽象工廠模模式的實(shí)例例三抽象工廠模模式的實(shí)例例四綜合案例(肯德基):故事中的角角色肯德基店—生產(chǎn)食物的的工廠食物(麻辣辣雞腿漢堡堡、奧爾良良烤雞翅、、薯?xiàng)l、可可樂)—工廠生產(chǎn)的的產(chǎn)品爸爸、兒子子—客戶抽象工廠模模式的實(shí)例例四綜合案例(肯德基):抽象化分析析“開-閉”原則-抽象抽象最大話話-“依賴倒置”抽象工廠模模式的實(shí)例例四抽象工廠模模式的實(shí)例例四packagecom.demo.factory.model;/****食品基類類*/publicabstractclassAbstractBaseFood{//類別protectedStringkind;//數(shù)量protectedintnum;//價(jià)格protectedfloatprice;//合計(jì)publicfloattotalPrice(){returnthis.num*this.price;}}抽象工廠模模式的實(shí)例例四packagecom.demo.factory.model;/***抽象食食物接口**/publicinterfaceIFood{/***打印輸輸出食物信信息*/voidprintMesage();}抽象工廠模模式的實(shí)例例四packagecom.demo.factory.model;/***漢堡類類**/publicabstractclassHamburgextendsAbstractBaseFoodimplementsIFood{publicvoidprintMesage(){System.out.println("--"+this.kind+"風(fēng)味漢堡,\t單價(jià):"+this.price+"\t數(shù)量:"+this.num+",\t合計(jì):"+this.totalPrice());}}抽象工廠模模式的實(shí)例例四packagecom.demo.factory.model.kfc;importcom.demo.factory.model.Hamburg;/***中國(guó)風(fēng)風(fēng)味的麻辣辣雞腿漢堡堡**/publicclassChinaHanburmextendsHamburg{/***構(gòu)造方法法**@paramkind*@paramprice*@paramnum*/publicChinaHanburm(intnum){this.kind="麻辣";this.price=14.0f;this.num=num;}}抽象工廠模模式的實(shí)例例四packagecom.demo.factory.itf;importcom.demo.factory.model.Beverage;importcom.demo.factory.model.ChickenWings;importcom.demo.factory.model.FrenchFries;importcom.demo.factory.model.Hamburg;/***肯德基抽象象工廠**/publicinterfaceIKfcFactory{//生產(chǎn)漢堡publicHamburgcreateHamburg(intnum);//生產(chǎn)薯?xiàng)lpublicFrenchFriescreateFrenchFries(intnum);//生產(chǎn)雞翅publicChickenWingscreateChickenWings(intnum);//生產(chǎn)飲料publicBeveragecreateBeverage(intnum);}抽象工廠模模式的實(shí)例例四packagecom.demo.factory.itf;importcom.demo.factory.model.Beverage;importcom.demo.factory.model.ChickenWings;…publicclassChinaKfcFactoryimplementsIKfcFactory{//生產(chǎn)可樂publicBeveragecreateBeverage(intnum){returnnewChinaBeverage(num);}//生產(chǎn)產(chǎn)奧奧爾爾良良烤烤雞雞翅翅publicChickenWingscreateChickenWings(intnum){returnnewChinaChickenWings(num);}//成產(chǎn)產(chǎn)薯薯?xiàng)l條publicFrenchFriescreateFrenchFries(intnum){returnnewChinaFrenchFries(num);}//生產(chǎn)產(chǎn)麻麻辣辣雞雞腿腿漢漢堡堡publicHamburgcreateHamburg(intnum){returnnewChinaHanburm(num);}}抽象象工工廠廠模模式式的的實(shí)實(shí)例例四四/***客客戶戶類類*/publicclassCustomer{//抽象象工工廠廠privateIKfcFactorykfcFactory;//構(gòu)造造方方法法將將抽抽象象工工廠廠作作為為參參數(shù)數(shù)傳傳入入publicCustomer(IKfcFactorykfcFactory){this.kfcFactory=kfcFactory;}/***訂訂購(gòu)購(gòu)食食物物*///訂購(gòu)購(gòu)雞雞腿腿漢漢堡堡publicfloatorderHamburg(intnum){//獲得得麻麻辣辣雞雞腿腿漢漢堡堡Hamburghamburg=kfcFactory.createHamburg(num);//輸出出訂訂購(gòu)購(gòu)信信息息hamburg.printMesage();//返回回總總價(jià)價(jià)returnhamburg.totalPrice();}……}抽象象工工廠廠模模式式的的實(shí)實(shí)例例四四publicclassMainApp{/***主主應(yīng)應(yīng)用用程程序序方方法法*/publicstaticvoidmain(String[]args){/***定定義義一一個(gè)個(gè)肯肯德德基基工工廠廠IKfcFactory*/IKfcFactorykfcFactory=newChinaKfcFactory();/***用用戶戶進(jìn)進(jìn)入入肯肯德德基基開開始始點(diǎn)點(diǎn)餐餐*/Customercustomer=newCustomer(kfcFactory);抽象象工工廠廠模模式式的的實(shí)實(shí)例例四四/***開開始始點(diǎn)點(diǎn)餐餐*///一個(gè)個(gè)麻麻辣辣雞雞腿腿漢漢堡堡floathamhurgMoney=customer.orderHamburg(1);//四個(gè)個(gè)新新奧奧爾爾良良烤烤雞雞翅翅floatchickenWingsMoney=customer.orderChickenWings(4);//一包包薯薯?xiàng)l條floatfrenchFriesMoney=customer.orderFrenchFries(1);//兩杯杯可可樂樂floatbeverageMoney=customer.orderBeverage(2);System.out.println("總計(jì)計(jì):"+(hamhurgMoney+chickenWingsMoney+frenchFriesMoney+beverageMoney));}}抽象象工工廠廠模模式式的的實(shí)實(shí)例例四四1.多多用用對(duì)對(duì)象象組組合合,,少少用用繼繼承承2.針針對(duì)對(duì)抽抽象象編編程程,,不不針針對(duì)對(duì)實(shí)實(shí)現(xiàn)現(xiàn)編編程程3.產(chǎn)產(chǎn)品品對(duì)對(duì)象象通通過過工工廠廠暴暴露露的的方方法法創(chuàng)創(chuàng)建建抽象象工工廠廠模模式式和和工工廠廠模模式式的的區(qū)區(qū)別別工廠廠方方法法模模式式用用來來創(chuàng)創(chuàng)建建一一個(gè)個(gè)抽抽象象產(chǎn)產(chǎn)品品,,具具體體工工廠廠實(shí)實(shí)現(xiàn)現(xiàn)工工廠廠方方法法來來創(chuàng)創(chuàng)建建具具體體產(chǎn)產(chǎn)品品,,而而抽抽象象工工廠廠模模式式用用來來創(chuàng)創(chuàng)建建一一個(gè)個(gè)產(chǎn)產(chǎn)品品家家族族的的抽抽象象類類類類型型。。抽象象工工廠廠模模式式的的優(yōu)優(yōu)勢(shì)勢(shì)與與缺缺陷陷優(yōu)勢(shì)勢(shì)::隔隔離離了了具具體體類類的的生生成成,,使使得得客客戶戶不不知知道道什什么么被被創(chuàng)創(chuàng)建建了了,,因因此此更更換換一一個(gè)個(gè)具具體體工工廠廠變變得得相相對(duì)對(duì)容容易易。。優(yōu)勢(shì)勢(shì)::當(dāng)當(dāng)一一個(gè)個(gè)產(chǎn)產(chǎn)品品族族中中多多個(gè)個(gè)對(duì)對(duì)象象被被設(shè)設(shè)計(jì)計(jì)成成一一起起工工作作時(shí)時(shí),,抽抽象象工工廠廠保保證證客客戶戶端端只只是是用用同同一一產(chǎn)產(chǎn)品品族族中中的的對(duì)對(duì)象象。。缺陷陷:添添加加新新的的產(chǎn)產(chǎn)品品對(duì)對(duì)象象時(shí)時(shí),,難難以以擴(kuò)擴(kuò)展展抽抽象象工工廠廠以以產(chǎn)產(chǎn)生生新新種種類類的的產(chǎn)產(chǎn)品品,,因因?yàn)闉锳bstractFactory規(guī)定定了了所所有有可可能能被被創(chuàng)創(chuàng)建建的的產(chǎn)產(chǎn)品品集集合合,,從從而而涉涉及及到到對(duì)對(duì)AbstractFactory及其其所所有有子子類類的的修修改改。。抽象象工工廠廠模模式式的的優(yōu)優(yōu)勢(shì)勢(shì)與與缺缺陷陷優(yōu)勢(shì)勢(shì)::隔隔離離了了具具體體類類的的生生成成,,使使得得客客戶戶不不知知道道什什么么被被創(chuàng)創(chuàng)建建了了,,因因此此更更換換一一個(gè)個(gè)具具體體工工廠廠變變得得相相對(duì)對(duì)容容易易。。優(yōu)勢(shì)勢(shì)::當(dāng)當(dāng)一一個(gè)個(gè)產(chǎn)產(chǎn)品品族族中中多多個(gè)個(gè)對(duì)對(duì)象象被被設(shè)設(shè)計(jì)計(jì)成成一一起起
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 13963-2025復(fù)印(包括多功能)設(shè)備術(shù)語
- geren借款合同范本
- 企業(yè)品牌策劃設(shè)計(jì)合同范本
- 產(chǎn)品維修授權(quán)合同范本
- 償還貨款合同范本
- 割松油合同范例
- 勞務(wù)分包合同范本2003
- 公司購(gòu)銷合同范本正規(guī)
- 男友出租合同范本
- 撰稿勞務(wù)合同范本
- 《智慧旅游認(rèn)知與實(shí)踐》課件-第九章 智慧旅行社
- 馬工程《刑法學(xué)(下冊(cè))》教學(xué)課件 第16章 刑法各論概述
- 英國(guó)簽證戶口本翻譯模板(共4頁)
- 現(xiàn)金調(diào)撥業(yè)務(wù)
- 空白個(gè)人簡(jiǎn)歷表格1
- 廣東省中小學(xué)生休學(xué)、復(fù)學(xué)申請(qǐng)表
- GPIB控制VP-8194D收音信號(hào)發(fā)生器指令
- 建立良好師生關(guān)系
- 鋼管、扣件、絲杠租賃明細(xì)表
- 施工現(xiàn)場(chǎng)臨電臨水施工方案
評(píng)論
0/150
提交評(píng)論