工廠方法模式設(shè)計(jì)模式淺談_第1頁
工廠方法模式設(shè)計(jì)模式淺談_第2頁
工廠方法模式設(shè)計(jì)模式淺談_第3頁
工廠方法模式設(shè)計(jì)模式淺談_第4頁
工廠方法模式設(shè)計(jì)模式淺談_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡(jiǎn)介

工廠方法模式設(shè)計(jì)模式淺談工廠方法經(jīng)常用在以下兩種情況中:第一種情況是對(duì)于某個(gè)產(chǎn)品,調(diào)用者清楚地知道應(yīng)該使用哪個(gè)具體工廠服務(wù),實(shí)例化該具體工廠,生產(chǎn)出具體的產(chǎn)品來。JavaCollection中的iterator()方法即屬于這種情況。第二種情況,只是需要一種產(chǎn)品,而不想知道也不需要知道究竟是哪個(gè)工廠為生產(chǎn)的,即最終選用哪個(gè)具體工廠的決定權(quán)在生產(chǎn)者一方,它們根據(jù)當(dāng)前系統(tǒng)的情況來實(shí)例化一個(gè)具體的工廠返回給使用者,而這個(gè)決策過程這對(duì)于使用者來說是透明的。工廠模式的定義工廠方法模式(FactoryMethod)的意義就是是定義一個(gè)用來創(chuàng)建產(chǎn)品對(duì)象工廠的接口,然后將所要完成的工作交給子類運(yùn)行。使得核心工廠類不再對(duì)產(chǎn)品進(jìn)行創(chuàng)建,這樣核心類就成為了一個(gè)類似抽象工廠的角色,只提供子類所要?jiǎng)?chuàng)建的對(duì)象的借口,這樣做的目的是使得工廠方法模式可以使系統(tǒng)在不改變工廠角色的情況下引進(jìn)其他新的產(chǎn)品。工廠方法模式其實(shí)是簡(jiǎn)單工廠模式的衍生,完善了許多簡(jiǎn)單工廠模式的缺點(diǎn),解決了許多簡(jiǎn)單工廠模式的問題。工廠方法模式的對(duì)簡(jiǎn)單工廠模式進(jìn)行了抽象。有一個(gè)抽象的工廠類或者接口,這個(gè)類將不再負(fù)責(zé)詳細(xì)的產(chǎn)品生產(chǎn),詳細(xì)的生產(chǎn)工作由工廠的子類去完成實(shí)現(xiàn)。在樣的模式中,工廠類和產(chǎn)品類一般可以相對(duì)應(yīng)。就是一個(gè)抽象工廠對(duì)應(yīng)一個(gè)抽象的產(chǎn)品,一個(gè)具體工廠對(duì)應(yīng)一個(gè)具體產(chǎn)品。工廠方法模式是最典型的模板方法模式應(yīng)用。工廠方法模式角色與結(jié)構(gòu)抽象工廠(Creator)角色:是工廠方法模式的核心,與應(yīng)用程序無關(guān)。任何在模式中創(chuàng)建的對(duì)象的工廠類必須實(shí)現(xiàn)這個(gè)接口。具體工廠(ConcreteCreator)角色:這是實(shí)現(xiàn)抽象工廠接口的具體工廠類,包含與應(yīng)用程序密切相關(guān)的邏輯,并且受到應(yīng)用程序調(diào)用以創(chuàng)建產(chǎn)品對(duì)象。在上圖中有兩個(gè)這樣的角色:BulbCreator與TubeCreator。抽象產(chǎn)品(Product)角色:工廠方法模式所創(chuàng)建的對(duì)象的超類型,也就是產(chǎn)品對(duì)象的共同父類或共同擁有的接口。在上圖中,這個(gè)角色是Light。具體產(chǎn)品(ConcreteProduct)角色:這個(gè)角色實(shí)現(xiàn)了抽象產(chǎn)品角色所定義的接口。某具體產(chǎn)品有專門的具體工廠創(chuàng)建,它們之間往往一一對(duì)應(yīng)。優(yōu)點(diǎn)有(1)用戶只需要關(guān)心所需產(chǎn)品對(duì)應(yīng)的工廠,無需關(guān)心創(chuàng)建細(xì)節(jié),甚至無需知道具體產(chǎn)品類的類名。它能夠使工廠方可以自主確定創(chuàng)建何種產(chǎn)品對(duì)象,而如何創(chuàng)建這個(gè)對(duì)象的細(xì)節(jié)則完美封裝在具體共產(chǎn)內(nèi)部。工廠方法模式可以使系統(tǒng)在不改變工廠角色的情況下引進(jìn)其他新的產(chǎn)品。缺點(diǎn)添加新產(chǎn)品是,需要編寫新的具體產(chǎn)品類,還要提供與之對(duì)應(yīng)的具體工廠類,系統(tǒng)中類的個(gè)數(shù)將成對(duì)增加,會(huì)給系統(tǒng)帶來額外的開銷。對(duì)工廠方法模式與簡(jiǎn)單工廠模式對(duì)比工廠方法模式和簡(jiǎn)單工廠模式在結(jié)構(gòu)上的不同是很明顯的。工廠方法模式的核心是一個(gè)抽象工廠類,而簡(jiǎn)單工廠模式把核心放在一個(gè)具體類上工廠方法模式可以允許很多具體工廠類從抽象工廠類中將創(chuàng)建行為繼承下來,從而可以成為多個(gè)簡(jiǎn)單工廠模式的綜合,進(jìn)而推廣了簡(jiǎn)單工廠模式。工廠方法模式退化后可以變得很像簡(jiǎn)單工廠模式。實(shí)例介紹寶馬工廠生產(chǎn)寶馬汽車,奔馳工廠生產(chǎn)奔馳汽車使用工廠,使用工廠模式模擬場(chǎng)景,繪制相應(yīng)類圖用java實(shí)現(xiàn)。工廠方法模式的一優(yōu)點(diǎn)在于增加新的產(chǎn)品類無需修改現(xiàn)有系統(tǒng),所以先創(chuàng)建抽象產(chǎn)品類autocar,在對(duì)抽象產(chǎn)品類進(jìn)行實(shí)例化,即具體產(chǎn)品類BMWautocar和具體產(chǎn)品類Benzautocar;在創(chuàng)建抽象工廠類autocarFactory,在對(duì)抽象工廠類進(jìn)行實(shí)例化,即具體工廠類BMWautocarFactory和具體工廠類BenzautocarFactory。建創(chuàng)建對(duì)象的任務(wù)委托給多個(gè)工廠子類的某一個(gè),客戶端在使用是可以無需關(guān)心是哪一個(gè)工廠創(chuàng)建的產(chǎn)品子類實(shí)例代碼及解釋抽象產(chǎn)品類汽車autocar;autocar作為抽象產(chǎn)品類,它可以是一個(gè)接口,也可以是一個(gè)抽象類,其中包含了所有產(chǎn)品都具有的業(yè)務(wù)方法yunxing()行駛;(2)具體產(chǎn)品類BMWautocar(寶馬汽車類)總結(jié)與思考工廠方法模式擴(kuò)展使用多個(gè)工廠方法在抽象工廠角色中定義多個(gè)方法,讓具體工廠角色實(shí)現(xiàn)這些不同的

溫馨提示

  • 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. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論