chap7簡單工廠模式_第1頁
chap7簡單工廠模式_第2頁
chap7簡單工廠模式_第3頁
chap7簡單工廠模式_第4頁
chap7簡單工廠模式_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

一、簡單工廠模式的概念與結

二、簡單工廠模式規(guī)范描述三、簡單工廠模式設計中用到

的設計原則一、簡單工廠模式的概念與結構1、問題的提出某農場種植并向市場銷售葡萄、草莓和蘋果這三種水果,現客戶要向該農場了解某水果的生長、收獲和種植情況,當用戶輸入某水果時即可查詢相應該水果具體情況,請設計并實現該程序。。2、基本思路用戶/客戶不需要親自去觀測各種水果的生長、收獲和種植情況,他只需要向農場主管部門打聽就行了,農場主管部門依據客戶需要的水果種類,發(fā)送水果情況單到農場具體水果部門,由具體水果部門填水果情況單,最后信息由農場主管部門返回到客戶手中

。一、簡單工廠模式的概念與結構2、基本思路其各類角色如下:一、簡單工廠模式的概念與結構工廠:由客戶端直接調用,在該類中聲明一個創(chuàng)建對象的接口(主管部門)。抽象產品:具體產品的共同接口,是所要創(chuàng)建的對象(具本產品)的父類(表單屬性)。具體產品:由工廠所創(chuàng)建的對象(已填好的表單)。具體各角色UML關系圖:3、GarderPlantFruit工廠方法具體實現由Visualc++6.0編程完成。一、簡單工廠模式的概念與結構4、GarderPlantFruit工廠方法代碼分析

抽象產品抽象接口類(父類)ClassFruit{ Public:

Virtualvoidgrow()=0;

Virtualvoidharvest()=0; Virtualvoidplant()=0;}一、簡單工廠模式的概念與結構具體產品實現實體類(子類)

ClassApple:publicFruit{ Apple(){}

Voidgrow() { Printf(“Appleisgrowing……\n”);} Voidharvest() { Printf(“Appleisharvesting……\n”);} Voidplant() { Printf(“Appleisplanting……\n”);} …………}具體產品實現實體類(子類)

ClassStrawberry:publicFruit{ Strawberry(){}

Voidgrow() { Printf(“Strawberryisgrowing……\n”);} Voidharvest() { Printf(“Strawberryisharvesting……\n”);} Voidplant() { Printf(“Strawberryisplanting……\n”);} …………}具體產品實現實體類(子類)

Classgrape:publicFruit{ grape(){}

Voidgrow() { Printf(“grapeisgrowing……\n”);} Voidharvest() { Printf(“grapeisharvesting……\n”);} Voidplant() { Printf(“grapeisplanting……\n”);} …………}4、GarderPlantFruit工廠方法代碼分析

工廠構造類接口

把和數據相關的問題與類的其它方法隔離

一、簡單工廠模式的概念與結構客戶對工廠的使用引用調用Intmain(int

argc,char*argv[]){ FruitGardener*frgd=newFruitGardener; Fruit*afruit=frga->factory(“Apple”);

aFruit->grow();

aFrui->harvest();

aFrui->plant();}一、簡單工廠模式的概念與結構4、GarderPlantFruit簡單工廠代碼分析

概念

定義一個創(chuàng)建對象的接口,根據提供給它的數據,返回幾個可能實體類中的一個類的實例,由工廠類根據傳入的參量決定創(chuàng)建出哪一種產品類的實例,是一個靜態(tài)接口,又叫靜態(tài)工廠方法模式。一、工廠方法模式的概念與結構4、簡單工廠模式的概念與結構基本結構一、簡單工廠模式的概念與結構4、簡單工廠模式的概念與結構Factory+CreateProduct()AbstractProduct+Operation()ConcreteProduct3+Operation()ConcreteProduct3+Operation()ConcreteProduct3+Operation()基本結構Factory類實現工廠角色 與應用程序無關,任何模式中創(chuàng)建的對象的工廠類必須實現這個接口。ClassFactory{ Public: StaticAbstractProductfactory() {ReturnnewConcreteProduct();}}

一、簡單工廠模式的概念與結構4、簡單工廠模式的概念與結構基本結構AbstractProduct

抽象角色ClassAbstractProduct{ Public:};一、簡單工廠模式的概念與結構4、簡單工廠模式的概念與結構基本結構ConcreteProduct

類實現抽象產品角色ClassConcreteProduct:AbstractProduct{ Public:

ConcreteProduct() { }}

一、簡單工廠模式的概念與結構4、簡單工廠模式的概念與結構簡略結構

一、簡單工廠模式的概念與結構4、簡單工廠模式的概念與結構系統(tǒng)僅有一個具體產品角色

一、簡單工廠模式的概念與結構4、簡單工廠模式的概念與結構二、簡單工廠模式規(guī)范描述

模式名和分類

:簡單工廠模式二、簡單工廠模式規(guī)范描述

意圖

:定義一個創(chuàng)建對象的接口,根據所提供的參數決定創(chuàng)建出哪一個實體類的一個實例。簡單工廠模式封裝了對象創(chuàng)建的過程。二、簡單工廠模式規(guī)范描述

別名

:靜態(tài)工廠

二、簡單工廠模式規(guī)范描述

動機

:為了提高內聚和松耦合,我們經常會抽象出一些類的公共接口,以形成抽象基類或接口,這樣我們可以通過聲明一個指向基類的指針來指實實際的子類實現,達到了多態(tài)的目的,但這容易出現一個問題:大量的子類繼承抽象基類,我們不得不在每次要用到子類的地方就編寫諸如“new×××;”的代碼,進而又帶來兩個問題:二、簡單工廠模式規(guī)范描述

客戶程序員必需知道實際子類的名稱,但當系統(tǒng)復雜后,命名是一個很不好得理問題,為了處理可能的名字沖突,有的命名可能并不是具有很好的可讀性和可記憶性,就姑且不論不同程序員千奇百怪的個人偏好了。

程序的擴展和維護變得越來越困難

。這就是簡單工廠模式要解決的,通過定義創(chuàng)建對象的接口,封裝對象的創(chuàng)建,與客戶程序員無關,增強程序的擴展性的可維護性。動機

:二、簡單工廠模式規(guī)范描述

適用性

:依據參數自動創(chuàng)建對象,是對象創(chuàng)建的真正工廠。二、簡單工廠模式規(guī)范描述

結構:Factory+CreateProduct()AbstractProduct+Operation()ConcreteProduct+Operation()二、簡單工廠模式規(guī)范描述

參與者

:AbstractProduct

定義簡單工廠方法所創(chuàng)建的對象的接口ConcreteProduct

實現AbstractProduct接口Factory定義簡單工廠方法,返回一個ConcreteProduct實例二、簡單工廠模式規(guī)范描述

協作

:Creator依賴于它的子類定義的工廠方法,它返回一個適當的ConcreteProduct實例

二、簡單工廠模式規(guī)范描述

效果

:工廠方法不再將與特定應用有關的類邦定到代碼中,代碼僅處理Product接口,可以與用戶定義的任何ConcreteProduct類一起使用。

連接平行層次的類,使用一個獨立的工廠類來創(chuàng)建不同的具體平行實體類,實現對不同對象操縱。為子類提供掛鉤(hook),以提供對象的擴展版本,在一個類的內部創(chuàng)建對象,比直接創(chuàng)建對象更靈活

。客戶可能僅為了創(chuàng)建一個特定ConcreteProduct對象,就不得不創(chuàng)建Creator的子類,進而要處理類演化的其他方面。二、簡單工廠模式規(guī)范描述

實現

:采用一個標識要被創(chuàng)建的對象種類的參數來創(chuàng)建多種產品。ClassCreator{ Public:VirtualProduct*Create(ProductID);}Product*Creator::Create(ProductID){ If(ProductID=MINE)returnnewMyProduct; If(ProductID=YOURS)returnnewYourProduct; Return0;}二、簡單工廠模式規(guī)范描述

示例

:詳見GarderPlantFruit。

二、簡單工廠模式規(guī)范描述

已知應用

:主要用于工具包和框架

溫馨提示

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

評論

0/150

提交評論