抽象工廠模式課件_第1頁
抽象工廠模式課件_第2頁
抽象工廠模式課件_第3頁
抽象工廠模式課件_第4頁
抽象工廠模式課件_第5頁
已閱讀5頁,還剩73頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

軟件設(shè)計模式第二講抽象工廠模式軟件設(shè)計模式第二講抽象工廠模式1抽象工廠模式名稱:抽象工廠模式(AbstractFactoryPattern)或Kit模式意圖:提供一系列相關(guān)或相互依賴對象的接口而無需指定他們具體的類。核心:抽象工廠模式(AbstractFactoryPattern)提供了一個接口,用于創(chuàng)建相關(guān)或者依賴對象的家族,而不需要指定具體實現(xiàn)類。抽象工廠模式允許客戶使用抽象接口來創(chuàng)建一組相關(guān)的產(chǎn)品,客戶類和工廠類分開,客戶需要任何產(chǎn)品的時候,只需要向工廠請求即可,客戶無須修改就可以獲得新產(chǎn)品。抽象工廠模式名稱:抽象工廠模式(AbstractFacto2抽象工廠模式抽象工廠模式3抽象工廠模式的動機考慮一個支持多種視感(look-and-feel)表準的用戶界面工具包,例如Motif和PresentationManager.不同的視感風格為滾動條、窗口和按鈕等用戶界面“窗口組件”定義不同的外觀和行為。為保證視感風格標準間的可移植性,一個應(yīng)用不應(yīng)該為一個特定的視感外觀硬編碼它的窗口組建。在整個應(yīng)用中實例化特定視感風格的窗口組件類將使得以后很難改變視感風格。抽象工廠模式的動機考慮一個支持多種視感(look-and-4抽象工廠模式的動機為解決這一問題,定義一個抽象的WidgetFactory類,這個類聲明了一個用來創(chuàng)建每一個類基本窗口組件的接口.每一類窗口組件都有一個抽象類,而具體子類則實現(xiàn)了窗口組件的特定視感風格。對于一個抽象窗口組件類,WidgetFactory接口都有一個返回新窗口組件對象的操作??蛻粽{(diào)用這些操作以獲得窗口組件實例,但客戶并不知道他們正在使用的是哪些具體類。這樣客戶就不依賴于一般的視感風格。抽象工廠模式的動機為解決這一問題,定義一個抽象的Widget5抽象工廠模式的作用抽象工廠模式的作用6抽象工廠模式的類圖抽象工廠模式的類圖7抽象工廠模式的類圖抽象工廠模式的類圖8抽象工廠模式的時序圖抽象工廠模式的時序圖9抽象工廠模式的實例一抽象工廠模式的實例一10抽象工廠模式的實例二大陸生態(tài)系統(tǒng):已知動物世界中各個大陸的動物是不同的,例如非洲有獅子和角馬,美洲有狼和野牛。動物可劃分為食草和食肉動物,獅子和美洲狼屬于食肉動物,而野牛和角馬屬于食草動物。獅子捕食角馬,美洲狼捕食野牛。抽象工廠模式的實例二大陸生態(tài)系統(tǒng):11抽象工廠模式的實例二抽象工廠模式的實例二12抽象工廠模式的實例三電腦生產(chǎn):IBM,Dell都是著名的計算機生產(chǎn)廠家,他們采用的主板、硬盤和CPU是不同的,但主板、硬盤和CPU之間一定要兼容?,F(xiàn)硬盤有Maxtor和WestDigit兩種,CPU有AMD和Intel,主板有MSI865PE和MSIK7N2G兩種。IBM采用Intel的CPU和WestDigit的硬盤,Dell采用AMD的CPU和Maxtor的硬盤。抽象工廠模式的實例三電腦生產(chǎn):13抽象工廠模式的實例三抽象工廠模式的實例三14抽象工廠模式的實例三抽象工廠模式的實例三15抽象工廠模式的實例三抽象工廠模式的實例三16抽象工廠模式的實例三抽象工廠模式的實例三17抽象工廠模式的實例三抽象工廠模式的實例三18抽象工廠模式的實例三抽象工廠模式的實例三19抽象工廠模式的實例三抽象工廠模式的實例三20抽象工廠模式的實例四綜合案例(肯德基):故事中的角色肯德基店—生產(chǎn)食物的工廠食物(麻辣雞腿漢堡、奧爾良烤雞翅、薯條、可樂)—工廠生產(chǎn)的產(chǎn)品爸爸、兒子—客戶抽象工廠模式的實例四綜合案例(肯德基):21抽象工廠模式的實例四綜合案例(肯德基):抽象化分析“開-閉”原則-抽象抽象最大話-

“依賴倒置”抽象工廠模式的實例四綜合案例(肯德基):22抽象工廠模式的實例四抽象工廠模式的實例四23抽象工廠模式的實例四packagecom.demo.factory.model;/****食品基類*/publicabstractclassAbstractBaseFood{//類別protectedStringkind;//數(shù)量protectedintnum;//價格protectedfloatprice;//合計publicfloattotalPrice(){returnthis.num*this.price;}}抽象工廠模式的實例四packagecom.demo.fac24抽象工廠模式的實例四packagecom.demo.factory.model;/***抽象食物接口**/publicinterfaceIFood{/***打印輸出食物信息*/voidprintMesage();}抽象工廠模式的實例四packagecom.demo.fac25抽象工廠模式的實例四packagecom.demo.factory.model;/***漢堡類**/publicabstractclassHamburgextendsAbstractBaseFoodimplementsIFood{publicvoidprintMesage(){System.out.println("--"+this.kind+"風味漢堡,\t單價:"+this.price+"\t數(shù)量:"

+this.num+",\t合計:"

+this.totalPrice());}}抽象工廠模式的實例四packagecom.demo.fac26抽象工廠模式的實例四packagecom.demo.factory.model.kfc;importcom.demo.factory.model.Hamburg;/***中國風味的麻辣雞腿漢堡**/publicclassChinaHanburmextendsHamburg{/***構(gòu)造方法**@paramkind*@paramprice*@paramnum*/publicChinaHanburm(intnum){this.kind="麻辣";this.price=14.0f;this.num=num;}}抽象工廠模式的實例四packagecom.demo.fac27抽象工廠模式的實例四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)薯條

publicFrenchFriescreateFrenchFries(intnum); //生產(chǎn)雞翅

publicChickenWingscreateChickenWings(intnum); //生產(chǎn)飲料

publicBeveragecreateBeverage(intnum);}抽象工廠模式的實例四packagecom.demo.fac28抽象工廠模式的實例四packagecom.demo.factory.itf;importcom.demo.factory.model.Beverage;importcom.demo.factory.model.ChickenWings;…publicclassChinaKfcFactoryimplementsIKfcFactory{//生產(chǎn)可樂publicBeveragecreateBeverage(intnum){returnnewChinaBeverage(num);}//生產(chǎn)奧爾良烤雞翅publicChickenWingscreateChickenWings(intnum){returnnewChinaChickenWings(num);}//成產(chǎn)薯條publicFrenchFriescreateFrenchFries(intnum){returnnewChinaFrenchFries(num);}//生產(chǎn)麻辣雞腿漢堡publicHamburgcreateHamburg(intnum){returnnewChinaHanburm(num);}}抽象工廠模式的實例四packagecom.demo.fac29抽象工廠模式的實例四/***客戶類*/publicclassCustomer{//抽象工廠privateIKfcFactorykfcFactory;//構(gòu)造方法將抽象工廠作為參數(shù)傳入publicCustomer(IKfcFactorykfcFactory){this.kfcFactory=kfcFactory;}/***訂購食物*///訂購雞腿漢堡publicfloatorderHamburg(intnum){//獲得麻辣雞腿漢堡Hamburghamburg=kfcFactory.createHamburg(num);//輸出訂購信息hamburg.printMesage();//返回總價returnhamburg.totalPrice();}…}抽象工廠模式的實例四/**30抽象工廠模式的實例四publicclassMainApp{/***主應(yīng)用程序方法*/publicstaticvoidmain(String[]args){/***定義一個肯德基工廠IKfcFactory*/IKfcFactorykfcFactory=newChinaKfcFactory();/***用戶進入肯德基開始點餐*/Customercustomer=newCustomer(kfcFactory);抽象工廠模式的實例四publicclassMainApp31抽象工廠模式的實例四/***開始點餐*///一個麻辣雞腿漢堡floathamhurgMoney=customer.orderHamburg(1);//四個新奧爾良烤雞翅floatchickenWingsMoney=customer.orderChickenWings(4);//一包薯條floatfrenchFriesMoney=customer.orderFrenchFries(1);//兩杯可樂floatbeverageMoney=customer.orderBeverage(2);System.out.println("總計:"+(hamhurgMoney+chickenWingsMoney+frenchFriesMoney+beverageMoney));}}抽象工廠模式的實例四/**32抽象工廠模式的實例四1.多用對象組合,少用繼承2.針對抽象編程,不針對實現(xiàn)編程3.產(chǎn)品對象通過工廠暴露的方法創(chuàng)建抽象工廠模式的實例四1.多用對象組合,少用繼承33抽象工廠模式和工廠模式的區(qū)別工廠方法模式用來創(chuàng)建一個抽象產(chǎn)品,具體工廠實現(xiàn)工廠方法來創(chuàng)建具體產(chǎn)品,而抽象工廠模式用來創(chuàng)建一個產(chǎn)品家族的抽象類類型。抽象工廠模式和工廠模式的區(qū)別工廠方法模式用來創(chuàng)建一個抽象產(chǎn)品34抽象工廠模式的優(yōu)勢與缺陷優(yōu)勢:隔離了具體類的生成,使得客戶不知道什么被創(chuàng)建了,因此更換一個具體工廠變得相對容易。優(yōu)勢:當一個產(chǎn)品族中多個對象被設(shè)計成一起工作時,抽象工廠保證客戶端只是用同一產(chǎn)品族中的對象。缺陷:添加新的產(chǎn)品對象時,難以擴展抽象工廠以產(chǎn)生新種類的產(chǎn)品,因為AbstractFactory規(guī)定了所有可能被創(chuàng)建的產(chǎn)品集合,從而涉及到對AbstractFactory及其所有子類的修改。抽象工廠模式的優(yōu)勢與缺陷優(yōu)勢:隔離了具體類的生成,使得客戶35抽象工廠模式的優(yōu)勢與缺陷優(yōu)勢:隔離了具體類的生成,使得客戶不知道什么被創(chuàng)建了,因此更換一個具體工廠變得相對容易。優(yōu)勢:當一個產(chǎn)品族中多個對象被設(shè)計成一起工作時,抽象工廠保證客戶端只是用同一產(chǎn)品族中的對象。缺陷:添加新的產(chǎn)品對象時,難以擴展抽象工廠以產(chǎn)生新種類的產(chǎn)品,因為AbstractFactory規(guī)定了所有可能被創(chuàng)建的產(chǎn)品集合,從而涉及到對AbstractFactory及其所有子類的修改。抽象工廠模式的優(yōu)勢與缺陷優(yōu)勢:隔離了具體類的生成,使得客戶36抽象工廠模式的應(yīng)用場景一個系統(tǒng)要獨立于它產(chǎn)品的創(chuàng)建、組合和表示的時候。一個系統(tǒng)要由多個產(chǎn)品系列中的一個來配置時。當你要強調(diào)一系列相關(guān)的產(chǎn)品對象的設(shè)計以便進行聯(lián)合使用時。當你提供一個產(chǎn)品類庫,而只是想顯示他們的接口而不是現(xiàn)實時。抽象工廠模式的應(yīng)用場景一個系統(tǒng)要獨立于它產(chǎn)品的創(chuàng)建、組合和表37作業(yè)采用抽象工廠模式對大陸生態(tài)模式進行UML建模,并進行實現(xiàn)。作業(yè)采用抽象工廠模式對大陸生態(tài)模式進行UML建模,并進行實現(xiàn)38演講完畢,謝謝觀看!演講完畢,謝謝觀看!39軟件設(shè)計模式第二講抽象工廠模式軟件設(shè)計模式第二講抽象工廠模式40抽象工廠模式名稱:抽象工廠模式(AbstractFactoryPattern)或Kit模式意圖:提供一系列相關(guān)或相互依賴對象的接口而無需指定他們具體的類。核心:抽象工廠模式(AbstractFactoryPattern)提供了一個接口,用于創(chuàng)建相關(guān)或者依賴對象的家族,而不需要指定具體實現(xiàn)類。抽象工廠模式允許客戶使用抽象接口來創(chuàng)建一組相關(guān)的產(chǎn)品,客戶類和工廠類分開,客戶需要任何產(chǎn)品的時候,只需要向工廠請求即可,客戶無須修改就可以獲得新產(chǎn)品。抽象工廠模式名稱:抽象工廠模式(AbstractFacto41抽象工廠模式抽象工廠模式42抽象工廠模式的動機考慮一個支持多種視感(look-and-feel)表準的用戶界面工具包,例如Motif和PresentationManager.不同的視感風格為滾動條、窗口和按鈕等用戶界面“窗口組件”定義不同的外觀和行為。為保證視感風格標準間的可移植性,一個應(yīng)用不應(yīng)該為一個特定的視感外觀硬編碼它的窗口組建。在整個應(yīng)用中實例化特定視感風格的窗口組件類將使得以后很難改變視感風格。抽象工廠模式的動機考慮一個支持多種視感(look-and-43抽象工廠模式的動機為解決這一問題,定義一個抽象的WidgetFactory類,這個類聲明了一個用來創(chuàng)建每一個類基本窗口組件的接口.每一類窗口組件都有一個抽象類,而具體子類則實現(xiàn)了窗口組件的特定視感風格。對于一個抽象窗口組件類,WidgetFactory接口都有一個返回新窗口組件對象的操作??蛻粽{(diào)用這些操作以獲得窗口組件實例,但客戶并不知道他們正在使用的是哪些具體類。這樣客戶就不依賴于一般的視感風格。抽象工廠模式的動機為解決這一問題,定義一個抽象的Widget44抽象工廠模式的作用抽象工廠模式的作用45抽象工廠模式的類圖抽象工廠模式的類圖46抽象工廠模式的類圖抽象工廠模式的類圖47抽象工廠模式的時序圖抽象工廠模式的時序圖48抽象工廠模式的實例一抽象工廠模式的實例一49抽象工廠模式的實例二大陸生態(tài)系統(tǒng):已知動物世界中各個大陸的動物是不同的,例如非洲有獅子和角馬,美洲有狼和野牛。動物可劃分為食草和食肉動物,獅子和美洲狼屬于食肉動物,而野牛和角馬屬于食草動物。獅子捕食角馬,美洲狼捕食野牛。抽象工廠模式的實例二大陸生態(tài)系統(tǒng):50抽象工廠模式的實例二抽象工廠模式的實例二51抽象工廠模式的實例三電腦生產(chǎn):IBM,Dell都是著名的計算機生產(chǎn)廠家,他們采用的主板、硬盤和CPU是不同的,但主板、硬盤和CPU之間一定要兼容?,F(xiàn)硬盤有Maxtor和WestDigit兩種,CPU有AMD和Intel,主板有MSI865PE和MSIK7N2G兩種。IBM采用Intel的CPU和WestDigit的硬盤,Dell采用AMD的CPU和Maxtor的硬盤。抽象工廠模式的實例三電腦生產(chǎn):52抽象工廠模式的實例三抽象工廠模式的實例三53抽象工廠模式的實例三抽象工廠模式的實例三54抽象工廠模式的實例三抽象工廠模式的實例三55抽象工廠模式的實例三抽象工廠模式的實例三56抽象工廠模式的實例三抽象工廠模式的實例三57抽象工廠模式的實例三抽象工廠模式的實例三58抽象工廠模式的實例三抽象工廠模式的實例三59抽象工廠模式的實例四綜合案例(肯德基):故事中的角色肯德基店—生產(chǎn)食物的工廠食物(麻辣雞腿漢堡、奧爾良烤雞翅、薯條、可樂)—工廠生產(chǎn)的產(chǎn)品爸爸、兒子—客戶抽象工廠模式的實例四綜合案例(肯德基):60抽象工廠模式的實例四綜合案例(肯德基):抽象化分析“開-閉”原則-抽象抽象最大話-

“依賴倒置”抽象工廠模式的實例四綜合案例(肯德基):61抽象工廠模式的實例四抽象工廠模式的實例四62抽象工廠模式的實例四packagecom.demo.factory.model;/****食品基類*/publicabstractclassAbstractBaseFood{//類別protectedStringkind;//數(shù)量protectedintnum;//價格protectedfloatprice;//合計publicfloattotalPrice(){returnthis.num*this.price;}}抽象工廠模式的實例四packagecom.demo.fac63抽象工廠模式的實例四packagecom.demo.factory.model;/***抽象食物接口**/publicinterfaceIFood{/***打印輸出食物信息*/voidprintMesage();}抽象工廠模式的實例四packagecom.demo.fac64抽象工廠模式的實例四packagecom.demo.factory.model;/***漢堡類**/publicabstractclassHamburgextendsAbstractBaseFoodimplementsIFood{publicvoidprintMesage(){System.out.println("--"+this.kind+"風味漢堡,\t單價:"+this.price+"\t數(shù)量:"

+this.num+",\t合計:"

+this.totalPrice());}}抽象工廠模式的實例四packagecom.demo.fac65抽象工廠模式的實例四packagecom.demo.factory.model.kfc;importcom.demo.factory.model.Hamburg;/***中國風味的麻辣雞腿漢堡**/publicclassChinaHanburmextendsHamburg{/***構(gòu)造方法**@paramkind*@paramprice*@paramnum*/publicChinaHanburm(intnum){this.kind="麻辣";this.price=14.0f;this.num=num;}}抽象工廠模式的實例四packagecom.demo.fac66抽象工廠模式的實例四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)薯條

publicFrenchFriescreateFrenchFries(intnum); //生產(chǎn)雞翅

publicChickenWingscreateChickenWings(intnum); //生產(chǎn)飲料

publicBeveragecreateBeverage(intnum);}抽象工廠模式的實例四packagecom.demo.fac67抽象工廠模式的實例四packagecom.demo.factory.itf;importcom.demo.factory.model.Beverage;importcom.demo.factory.model.ChickenWings;…publicclassChinaKfcFactoryimplementsIKfcFactory{//生產(chǎn)可樂publicBeveragecreateBeverage(intnum){returnnewChinaBeverage(num);}//生產(chǎn)奧爾良烤雞翅publicChickenWingscreateChickenWings(intnum){returnnewChinaChickenWings(num);}//成產(chǎn)薯條publicFrenchFriescreateFrenchFries(intnum){returnnewChinaFrenchFries(num);}//生產(chǎn)麻辣雞腿漢堡publicHamburgcreateHamburg(intnum){returnnewChinaHanburm(num);}}抽象工廠模式的實例四packagecom.demo.fac68抽象工廠模式的實例四/***客戶類*/publicclassCustomer{//抽象工廠privateIKfcFactorykfcFactory;//構(gòu)造方法將抽象工廠作為參數(shù)傳入publicCustomer(IKfcFactorykfcFactory){this.kfcFactory=kfcFactory;}/***訂購食物*///訂購雞腿漢堡publicfloatorderHamburg(intnum){//獲得麻辣雞腿漢堡Hamburghamburg=kfcFactory.createHamburg(num);//輸出訂購信息hamburg.printMesage();//返回總價returnhamburg.totalPrice();}…}抽象工廠模式的實例四/**69抽象工廠模式的實例四publicclassMainApp{/***主應(yīng)用程序方法*/publicstaticvoidmain(String[]args){/***定義一個肯德基工廠IKfcFactory*/IKfcFactorykfcFactory=newChinaKfcFactory();/***用戶進入肯德基開始點餐*/Customercustomer=newCustomer(kfcFactory);抽象工廠模式的實例四publicclassMainApp70抽象工廠模式的實例四/***開始點餐*///一個麻辣雞腿漢堡floathamhurgMoney=customer.orderHamburg(1);//四個新奧爾良烤雞翅floatchickenWingsMoney=cus

溫馨提示

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

評論

0/150

提交評論