![chap7簡單工廠模式_第1頁](http://file4.renrendoc.com/view/689bef15ebc09143071f456c54512931/689bef15ebc09143071f456c545129311.gif)
![chap7簡單工廠模式_第2頁](http://file4.renrendoc.com/view/689bef15ebc09143071f456c54512931/689bef15ebc09143071f456c545129312.gif)
![chap7簡單工廠模式_第3頁](http://file4.renrendoc.com/view/689bef15ebc09143071f456c54512931/689bef15ebc09143071f456c545129313.gif)
![chap7簡單工廠模式_第4頁](http://file4.renrendoc.com/view/689bef15ebc09143071f456c54512931/689bef15ebc09143071f456c545129314.gif)
![chap7簡單工廠模式_第5頁](http://file4.renrendoc.com/view/689bef15ebc09143071f456c54512931/689bef15ebc09143071f456c545129315.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
一、簡單工廠模式的概念與結(jié)
構(gòu)
二、簡單工廠模式規(guī)范描述三、簡單工廠模式設(shè)計中用到
的設(shè)計原則一、簡單工廠模式的概念與結(jié)構(gòu)1、問題的提出某農(nóng)場種植并向市場銷售葡萄、草莓和蘋果這三種水果,現(xiàn)客戶要向該農(nóng)場了解某水果的生長、收獲和種植情況,當(dāng)用戶輸入某水果時即可查詢相應(yīng)該水果具體情況,請設(shè)計并實現(xiàn)該程序。。2、基本思路用戶/客戶不需要親自去觀測各種水果的生長、收獲和種植情況,他只需要向農(nóng)場主管部門打聽就行了,農(nóng)場主管部門依據(jù)客戶需要的水果種類,發(fā)送水果情況單到農(nóng)場具體水果部門,由具體水果部門填水果情況單,最后信息由農(nóng)場主管部門返回到客戶手中
。一、簡單工廠模式的概念與結(jié)構(gòu)2、基本思路其各類角色如下:一、簡單工廠模式的概念與結(jié)構(gòu)工廠:由客戶端直接調(diào)用,在該類中聲明一個創(chuàng)建對象的接口(主管部門)。抽象產(chǎn)品:具體產(chǎn)品的共同接口,是所要創(chuàng)建的對象(具本產(chǎn)品)的父類(表單屬性)。具體產(chǎn)品:由工廠所創(chuàng)建的對象(已填好的表單)。具體各角色UML關(guān)系圖:3、GarderPlantFruit工廠方法具體實現(xiàn)由Visualc++6.0編程完成。一、簡單工廠模式的概念與結(jié)構(gòu)4、GarderPlantFruit工廠方法代碼分析
抽象產(chǎn)品抽象接口類(父類)ClassFruit{ Public:
Virtualvoidgrow()=0;
Virtualvoidharvest()=0; Virtualvoidplant()=0;}一、簡單工廠模式的概念與結(jié)構(gòu)具體產(chǎn)品實現(xiàn)實體類(子類)
ClassApple:publicFruit{ Apple(){}
Voidgrow() { Printf(“Appleisgrowing……\n”);} Voidharvest() { Printf(“Appleisharvesting……\n”);} Voidplant() { Printf(“Appleisplanting……\n”);} …………}具體產(chǎn)品實現(xiàn)實體類(子類)
ClassStrawberry:publicFruit{ Strawberry(){}
Voidgrow() { Printf(“Strawberryisgrowing……\n”);} Voidharvest() { Printf(“Strawberryisharvesting……\n”);} Voidplant() { Printf(“Strawberryisplanting……\n”);} …………}具體產(chǎn)品實現(xiàn)實體類(子類)
Classgrape:publicFruit{ grape(){}
Voidgrow() { Printf(“grapeisgrowing……\n”);} Voidharvest() { Printf(“grapeisharvesting……\n”);} Voidplant() { Printf(“grapeisplanting……\n”);} …………}4、GarderPlantFruit工廠方法代碼分析
工廠構(gòu)造類接口
把和數(shù)據(jù)相關(guān)的問題與類的其它方法隔離
一、簡單工廠模式的概念與結(jié)構(gòu)客戶對工廠的使用引用調(diào)用Intmain(int
argc,char*argv[]){ FruitGardener*frgd=newFruitGardener; Fruit*afruit=frga->factory(“Apple”);
aFruit->grow();
aFrui->harvest();
aFrui->plant();}一、簡單工廠模式的概念與結(jié)構(gòu)4、GarderPlantFruit簡單工廠代碼分析
概念
定義一個創(chuàng)建對象的接口,根據(jù)提供給它的數(shù)據(jù),返回幾個可能實體類中的一個類的實例,由工廠類根據(jù)傳入的參量決定創(chuàng)建出哪一種產(chǎn)品類的實例,是一個靜態(tài)接口,又叫靜態(tài)工廠方法模式。一、工廠方法模式的概念與結(jié)構(gòu)4、簡單工廠模式的概念與結(jié)構(gòu)基本結(jié)構(gòu)一、簡單工廠模式的概念與結(jié)構(gòu)4、簡單工廠模式的概念與結(jié)構(gòu)Factory+CreateProduct()AbstractProduct+Operation()ConcreteProduct3+Operation()ConcreteProduct3+Operation()ConcreteProduct3+Operation()基本結(jié)構(gòu)Factory類實現(xiàn)工廠角色 與應(yīng)用程序無關(guān),任何模式中創(chuàng)建的對象的工廠類必須實現(xiàn)這個接口。ClassFactory{ Public: StaticAbstractProductfactory() {ReturnnewConcreteProduct();}}
一、簡單工廠模式的概念與結(jié)構(gòu)4、簡單工廠模式的概念與結(jié)構(gòu)基本結(jié)構(gòu)AbstractProduct
抽象角色ClassAbstractProduct{ Public:};一、簡單工廠模式的概念與結(jié)構(gòu)4、簡單工廠模式的概念與結(jié)構(gòu)基本結(jié)構(gòu)ConcreteProduct
類實現(xiàn)抽象產(chǎn)品角色ClassConcreteProduct:AbstractProduct{ Public:
ConcreteProduct() { }}
一、簡單工廠模式的概念與結(jié)構(gòu)4、簡單工廠模式的概念與結(jié)構(gòu)簡略結(jié)構(gòu)
一、簡單工廠模式的概念與結(jié)構(gòu)4、簡單工廠模式的概念與結(jié)構(gòu)系統(tǒng)僅有一個具體產(chǎn)品角色
一、簡單工廠模式的概念與結(jié)構(gòu)4、簡單工廠模式的概念與結(jié)構(gòu)二、簡單工廠模式規(guī)范描述
模式名和分類
:簡單工廠模式二、簡單工廠模式規(guī)范描述
意圖
:定義一個創(chuàng)建對象的接口,根據(jù)所提供的參數(shù)決定創(chuàng)建出哪一個實體類的一個實例。簡單工廠模式封裝了對象創(chuàng)建的過程。二、簡單工廠模式規(guī)范描述
別名
:靜態(tài)工廠
二、簡單工廠模式規(guī)范描述
動機
:為了提高內(nèi)聚和松耦合,我們經(jīng)常會抽象出一些類的公共接口,以形成抽象基類或接口,這樣我們可以通過聲明一個指向基類的指針來指實實際的子類實現(xiàn),達到了多態(tài)的目的,但這容易出現(xiàn)一個問題:大量的子類繼承抽象基類,我們不得不在每次要用到子類的地方就編寫諸如“new×××;”的代碼,進而又帶來兩個問題:二、簡單工廠模式規(guī)范描述
客戶程序員必需知道實際子類的名稱,但當(dāng)系統(tǒng)復(fù)雜后,命名是一個很不好得理問題,為了處理可能的名字沖突,有的命名可能并不是具有很好的可讀性和可記憶性,就姑且不論不同程序員千奇百怪的個人偏好了。
程序的擴展和維護變得越來越困難
。這就是簡單工廠模式要解決的,通過定義創(chuàng)建對象的接口,封裝對象的創(chuàng)建,與客戶程序員無關(guān),增強程序的擴展性的可維護性。動機
:二、簡單工廠模式規(guī)范描述
適用性
:依據(jù)參數(shù)自動創(chuàng)建對象,是對象創(chuàng)建的真正工廠。二、簡單工廠模式規(guī)范描述
結(jié)構(gòu):Factory+CreateProduct()AbstractProduct+Operation()ConcreteProduct+Operation()二、簡單工廠模式規(guī)范描述
參與者
:AbstractProduct
定義簡單工廠方法所創(chuàng)建的對象的接口ConcreteProduct
實現(xiàn)AbstractProduct接口Factory定義簡單工廠方法,返回一個ConcreteProduct實例二、簡單工廠模式規(guī)范描述
協(xié)作
:Creator依賴于它的子類定義的工廠方法,它返回一個適當(dāng)?shù)腃oncreteProduct實例
二、簡單工廠模式規(guī)范描述
效果
:工廠方法不再將與特定應(yīng)用有關(guān)的類邦定到代碼中,代碼僅處理Product接口,可以與用戶定義的任何ConcreteProduct類一起使用。
連接平行層次的類,使用一個獨立的工廠類來創(chuàng)建不同的具體平行實體類,實現(xiàn)對不同對象操縱。為子類提供掛鉤(hook),以提供對象的擴展版本,在一個類的內(nèi)部創(chuàng)建對象,比直接創(chuàng)建對象更靈活
。客戶可能僅為了創(chuàng)建一個特定ConcreteProduct對象,就不得不創(chuàng)建Creator的子類,進而要處理類演化的其他方面。二、簡單工廠模式規(guī)范描述
實現(xiàn)
:采用一個標(biāo)識要被創(chuàng)建的對象種類的參數(shù)來創(chuàng)建多種產(chǎn)品。ClassCreator{ Public:VirtualProduct*Create(ProductID);}Product*Creator::Create(ProductID){ If(ProductID=MINE)returnnewMyProduct; If(ProductID=YOURS)returnnewYourProduct; Return0;}二、簡單工廠模式規(guī)范描述
示例
:詳見GarderPlantFruit。
二、簡單工廠模式規(guī)范描述
已知應(yīng)用
:主要用于工具包和框架
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 冀教版數(shù)學(xué)八年級上冊《SAS》聽評課記錄5
- 湘教版數(shù)學(xué)七年級下冊3.2.2《角的度量》聽評課記錄
- (湘教版)七年級數(shù)學(xué)下冊:2.1.4《多項式的乘法》聽評課記錄
- 七年級道德與法治上冊第三單元 師長情誼第六課師生之間第2框師生交往聽課評課記錄(新人教版)
- 人教版七年級數(shù)學(xué)上冊:4.1.2《點、線、面、體》聽評課記錄1
- 湘教版數(shù)學(xué)七年級上冊1.4.1《有理數(shù)的加法》聽評課記錄
- 部編版八年級道德與法治上冊聽課評課記錄《9.1認(rèn)識總體國家安全觀》
- 暑假小學(xué)一年級學(xué)習(xí)計劃
- 三年級下學(xué)期班主任工作計劃
- 出租房屋合同范本
- 2025中國移動安徽分公司春季社會招聘高頻重點提升(共500題)附帶答案詳解
- 七年級英語下學(xué)期開學(xué)考試(深圳專用)-2022-2023學(xué)年七年級英語下冊單元重難點易錯題精練(牛津深圳版)
- 杭州市房地產(chǎn)經(jīng)紀(jì)服務(wù)合同
- 放射科護理常規(guī)
- 新時代中小學(xué)教師職業(yè)行為十項準(zhǔn)則
- 人教版八年級上冊英語1-4單元測試卷(含答案)
- 2024年大宗貿(mào)易合作共贏協(xié)議書模板
- 初中數(shù)學(xué)教學(xué)經(jīng)驗分享
- 新聞記者證600道考試題-附標(biāo)準(zhǔn)答案
- 2024年公開招聘人員報名資格審查表
- TSG ZF001-2006《安全閥安全技術(shù)監(jiān)察規(guī)程》
評論
0/150
提交評論