




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
一、簡(jiǎn)單工廠模式的概念與結(jié)
構(gòu)
二、簡(jiǎn)單工廠模式規(guī)范描述三、簡(jiǎn)單工廠模式設(shè)計(jì)中用到
的設(shè)計(jì)原則一、簡(jiǎn)單工廠模式的概念與結(jié)構(gòu)1、問(wèn)題的提出某農(nóng)場(chǎng)種植并向市場(chǎng)銷(xiāo)售葡萄、草莓和蘋(píng)果這三種水果,現(xiàn)客戶(hù)要向該農(nóng)場(chǎng)了解某水果的生長(zhǎng)、收獲和種植情況,當(dāng)用戶(hù)輸入某水果時(shí)即可查詢(xún)相應(yīng)該水果具體情況,請(qǐng)?jiān)O(shè)計(jì)并實(shí)現(xiàn)該程序。。2、基本思路用戶(hù)/客戶(hù)不需要親自去觀測(cè)各種水果的生長(zhǎng)、收獲和種植情況,他只需要向農(nóng)場(chǎng)主管部門(mén)打聽(tīng)就行了,農(nóng)場(chǎng)主管部門(mén)依據(jù)客戶(hù)需要的水果種類(lèi),發(fā)送水果情況單到農(nóng)場(chǎng)具體水果部門(mén),由具體水果部門(mén)填水果情況單,最后信息由農(nóng)場(chǎng)主管部門(mén)返回到客戶(hù)手中
。一、簡(jiǎn)單工廠模式的概念與結(jié)構(gòu)2、基本思路其各類(lèi)角色如下:一、簡(jiǎn)單工廠模式的概念與結(jié)構(gòu)工廠:由客戶(hù)端直接調(diào)用,在該類(lèi)中聲明一個(gè)創(chuàng)建對(duì)象的接口(主管部門(mén))。抽象產(chǎn)品:具體產(chǎn)品的共同接口,是所要?jiǎng)?chuàng)建的對(duì)象(具本產(chǎn)品)的父類(lèi)(表單屬性)。具體產(chǎn)品:由工廠所創(chuàng)建的對(duì)象(已填好的表單)。具體各角色UML關(guān)系圖:3、GarderPlantFruit工廠方法具體實(shí)現(xiàn)由Visualc++6.0編程完成。一、簡(jiǎn)單工廠模式的概念與結(jié)構(gòu)4、GarderPlantFruit工廠方法代碼分析
抽象產(chǎn)品抽象接口類(lèi)(父類(lèi))ClassFruit{ Public:
Virtualvoidgrow()=0;
Virtualvoidharvest()=0; Virtualvoidplant()=0;}一、簡(jiǎn)單工廠模式的概念與結(jié)構(gòu)具體產(chǎn)品實(shí)現(xiàn)實(shí)體類(lèi)(子類(lèi))
ClassApple:publicFruit{ Apple(){}
Voidgrow() { Printf(“Appleisgrowing……\n”);} Voidharvest() { Printf(“Appleisharvesting……\n”);} Voidplant() { Printf(“Appleisplanting……\n”);} …………}具體產(chǎn)品實(shí)現(xiàn)實(shí)體類(lèi)(子類(lèi))
ClassStrawberry:publicFruit{ Strawberry(){}
Voidgrow() { Printf(“Strawberryisgrowing……\n”);} Voidharvest() { Printf(“Strawberryisharvesting……\n”);} Voidplant() { Printf(“Strawberryisplanting……\n”);} …………}具體產(chǎn)品實(shí)現(xiàn)實(shí)體類(lèi)(子類(lèi))
Classgrape:publicFruit{ grape(){}
Voidgrow() { Printf(“grapeisgrowing……\n”);} Voidharvest() { Printf(“grapeisharvesting……\n”);} Voidplant() { Printf(“grapeisplanting……\n”);} …………}4、GarderPlantFruit工廠方法代碼分析
工廠構(gòu)造類(lèi)接口
把和數(shù)據(jù)相關(guān)的問(wèn)題與類(lèi)的其它方法隔離
一、簡(jiǎn)單工廠模式的概念與結(jié)構(gòu)客戶(hù)對(duì)工廠的使用引用調(diào)用Intmain(int
argc,char*argv[]){ FruitGardener*frgd=newFruitGardener; Fruit*afruit=frga->factory(“Apple”);
aFruit->grow();
aFrui->harvest();
aFrui->plant();}一、簡(jiǎn)單工廠模式的概念與結(jié)構(gòu)4、GarderPlantFruit簡(jiǎn)單工廠代碼分析
概念
定義一個(gè)創(chuàng)建對(duì)象的接口,根據(jù)提供給它的數(shù)據(jù),返回幾個(gè)可能實(shí)體類(lèi)中的一個(gè)類(lèi)的實(shí)例,由工廠類(lèi)根據(jù)傳入的參量決定創(chuàng)建出哪一種產(chǎn)品類(lèi)的實(shí)例,是一個(gè)靜態(tài)接口,又叫靜態(tài)工廠方法模式。一、工廠方法模式的概念與結(jié)構(gòu)4、簡(jiǎn)單工廠模式的概念與結(jié)構(gòu)基本結(jié)構(gòu)一、簡(jiǎn)單工廠模式的概念與結(jié)構(gòu)4、簡(jiǎn)單工廠模式的概念與結(jié)構(gòu)Factory+CreateProduct()AbstractProduct+Operation()ConcreteProduct3+Operation()ConcreteProduct3+Operation()ConcreteProduct3+Operation()基本結(jié)構(gòu)Factory類(lèi)實(shí)現(xiàn)工廠角色 與應(yīng)用程序無(wú)關(guān),任何模式中創(chuàng)建的對(duì)象的工廠類(lèi)必須實(shí)現(xiàn)這個(gè)接口。ClassFactory{ Public: StaticAbstractProductfactory() {ReturnnewConcreteProduct();}}
一、簡(jiǎn)單工廠模式的概念與結(jié)構(gòu)4、簡(jiǎn)單工廠模式的概念與結(jié)構(gòu)基本結(jié)構(gòu)AbstractProduct
抽象角色ClassAbstractProduct{ Public:};一、簡(jiǎn)單工廠模式的概念與結(jié)構(gòu)4、簡(jiǎn)單工廠模式的概念與結(jié)構(gòu)基本結(jié)構(gòu)ConcreteProduct
類(lèi)實(shí)現(xiàn)抽象產(chǎn)品角色ClassConcreteProduct:AbstractProduct{ Public:
ConcreteProduct() { }}
一、簡(jiǎn)單工廠模式的概念與結(jié)構(gòu)4、簡(jiǎn)單工廠模式的概念與結(jié)構(gòu)簡(jiǎn)略結(jié)構(gòu)
一、簡(jiǎn)單工廠模式的概念與結(jié)構(gòu)4、簡(jiǎn)單工廠模式的概念與結(jié)構(gòu)系統(tǒng)僅有一個(gè)具體產(chǎn)品角色
一、簡(jiǎn)單工廠模式的概念與結(jié)構(gòu)4、簡(jiǎn)單工廠模式的概念與結(jié)構(gòu)二、簡(jiǎn)單工廠模式規(guī)范描述
模式名和分類(lèi)
:簡(jiǎn)單工廠模式二、簡(jiǎn)單工廠模式規(guī)范描述
意圖
:定義一個(gè)創(chuàng)建對(duì)象的接口,根據(jù)所提供的參數(shù)決定創(chuàng)建出哪一個(gè)實(shí)體類(lèi)的一個(gè)實(shí)例。簡(jiǎn)單工廠模式封裝了對(duì)象創(chuàng)建的過(guò)程。二、簡(jiǎn)單工廠模式規(guī)范描述
別名
:靜態(tài)工廠
二、簡(jiǎn)單工廠模式規(guī)范描述
動(dòng)機(jī)
:為了提高內(nèi)聚和松耦合,我們經(jīng)常會(huì)抽象出一些類(lèi)的公共接口,以形成抽象基類(lèi)或接口,這樣我們可以通過(guò)聲明一個(gè)指向基類(lèi)的指針來(lái)指實(shí)實(shí)際的子類(lèi)實(shí)現(xiàn),達(dá)到了多態(tài)的目的,但這容易出現(xiàn)一個(gè)問(wèn)題:大量的子類(lèi)繼承抽象基類(lèi),我們不得不在每次要用到子類(lèi)的地方就編寫(xiě)諸如“new×××;”的代碼,進(jìn)而又帶來(lái)兩個(gè)問(wèn)題:二、簡(jiǎn)單工廠模式規(guī)范描述
客戶(hù)程序員必需知道實(shí)際子類(lèi)的名稱(chēng),但當(dāng)系統(tǒng)復(fù)雜后,命名是一個(gè)很不好得理問(wèn)題,為了處理可能的名字沖突,有的命名可能并不是具有很好的可讀性和可記憶性,就姑且不論不同程序員千奇百怪的個(gè)人偏好了。
程序的擴(kuò)展和維護(hù)變得越來(lái)越困難
。這就是簡(jiǎn)單工廠模式要解決的,通過(guò)定義創(chuàng)建對(duì)象的接口,封裝對(duì)象的創(chuàng)建,與客戶(hù)程序員無(wú)關(guān),增強(qiáng)程序的擴(kuò)展性的可維護(hù)性。動(dòng)機(jī)
:二、簡(jiǎn)單工廠模式規(guī)范描述
適用性
:依據(jù)參數(shù)自動(dòng)創(chuàng)建對(duì)象,是對(duì)象創(chuàng)建的真正工廠。二、簡(jiǎn)單工廠模式規(guī)范描述
結(jié)構(gòu):Factory+CreateProduct()AbstractProduct+Operation()ConcreteProduct+Operation()二、簡(jiǎn)單工廠模式規(guī)范描述
參與者
:AbstractProduct
定義簡(jiǎn)單工廠方法所創(chuàng)建的對(duì)象的接口ConcreteProduct
實(shí)現(xiàn)AbstractProduct接口Factory定義簡(jiǎn)單工廠方法,返回一個(gè)ConcreteProduct實(shí)例二、簡(jiǎn)單工廠模式規(guī)范描述
協(xié)作
:Creator依賴(lài)于它的子類(lèi)定義的工廠方法,它返回一個(gè)適當(dāng)?shù)腃oncreteProduct實(shí)例
二、簡(jiǎn)單工廠模式規(guī)范描述
效果
:工廠方法不再將與特定應(yīng)用有關(guān)的類(lèi)邦定到代碼中,代碼僅處理Product接口,可以與用戶(hù)定義的任何ConcreteProduct類(lèi)一起使用。
連接平行層次的類(lèi),使用一個(gè)獨(dú)立的工廠類(lèi)來(lái)創(chuàng)建不同的具體平行實(shí)體類(lèi),實(shí)現(xiàn)對(duì)不同對(duì)象操縱。為子類(lèi)提供掛鉤(hook),以提供對(duì)象的擴(kuò)展版本,在一個(gè)類(lèi)的內(nèi)部創(chuàng)建對(duì)象,比直接創(chuàng)建對(duì)象更靈活
??蛻?hù)可能僅為了創(chuàng)建一個(gè)特定ConcreteProduct對(duì)象,就不得不創(chuàng)建Creator的子類(lèi),進(jìn)而要處理類(lèi)演化的其他方面。二、簡(jiǎn)單工廠模式規(guī)范描述
實(shí)現(xiàn)
:采用一個(gè)標(biāo)識(shí)要被創(chuàng)建的對(duì)象種類(lèi)的參數(shù)來(lái)創(chuàng)建多種產(chǎn)品。ClassCreator{ Public:VirtualProduct*Create(ProductID);}Product*Creator::Create(ProductID){ If(ProductID=MINE)returnnewMyProduct; If(ProductID=YOURS)returnnewYourProduct; Return0;}二、簡(jiǎn)單工廠模式規(guī)范描述
示例
:詳見(jiàn)GarderPlantFruit。
二、簡(jiǎn)單工廠模式規(guī)范描述
已知應(yīng)用
:主要用于工具包和框架
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年份第二季度跨境航天食品無(wú)菌包裝場(chǎng)地租賃衛(wèi)生協(xié)議
- (新統(tǒng)編版)語(yǔ)文二年級(jí)下冊(cè)第三單元分析+大單元教學(xué)設(shè)計(jì)+詳細(xì)教案
- 25年2月份深空探測(cè)模擬艙密閉空間計(jì)時(shí)心理評(píng)估
- 2025年份首季度衛(wèi)星發(fā)射塔架拆除技術(shù)安全協(xié)議
- 網(wǎng)絡(luò)安全與文明
- 2025金融機(jī)構(gòu)貸款合同協(xié)議書(shū)范本
- 二零二五版委托房屋出售合同書(shū)
- 二零二五民間借款協(xié)議合同范例
- 急冷塔設(shè)計(jì)停留時(shí)間
- 土地委托轉(zhuǎn)讓居間合同范例
- 教育評(píng)價(jià)改革的創(chuàng)新路徑與實(shí)踐方案
- 壁紙施工協(xié)議書(shū)范本
- 2025年遼寧沈陽(yáng)地鐵集團(tuán)有限公司所屬分公司招聘筆試參考題庫(kù)附帶答案詳解
- 2024年供應(yīng)鏈數(shù)字化轉(zhuǎn)型試題及答案
- 學(xué)校健身俱樂(lè)部的盈利模式探索
- 2025年浙江嘉興市海寧實(shí)康水務(wù)有限公司招聘筆試參考題庫(kù)含答案解析
- 4-6歲幼兒同伴交往能力量表
- 人教版 數(shù)學(xué)一年級(jí)下冊(cè) 第三單元 100以?xún)?nèi)數(shù)的認(rèn)識(shí)綜合素養(yǎng)評(píng)價(jià)(含答案)
- 無(wú)錫諾宇醫(yī)藥科技有限公司放射性藥物開(kāi)發(fā)及核藥裝備研制項(xiàng)目報(bào)告表
- 2025年中考道德與法治仿真模擬測(cè)試卷(含答案)
- 工程造價(jià)司法鑒定與糾紛調(diào)解典型案例-記錄
評(píng)論
0/150
提交評(píng)論