簡單工廠模式和抽象工廠模式的通俗理解_第1頁
簡單工廠模式和抽象工廠模式的通俗理解_第2頁
簡單工廠模式和抽象工廠模式的通俗理解_第3頁
簡單工廠模式和抽象工廠模式的通俗理解_第4頁
簡單工廠模式和抽象工廠模式的通俗理解_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

簡單工廠模式和抽象工廠模式的通俗理解以造汽車為例來通俗的說一下:(寫的不好或有錯誤的地方歡迎大家指正)汽車制造商要造汽車賣給客戶,那應(yīng)該如可來做?看下面:第一:汽車制造商要知道客戶要什么樣的汽車,即設(shè)計汽車;第二:設(shè)計完后,一切ok后,就可以制造汽車了;根據(jù)上面二步描述,我們用程序表達(dá)出來就是(假設(shè)現(xiàn)在要造一輛Buick):a.設(shè)計師和工程師去設(shè)計汽車;publicclassBuickCar//設(shè)計buick車{publicstringDec(){return"Buick";}}BuickCarbuick=newBuickCar();//造了輛buick結(jié)構(gòu)就是上面的很好理解,我們繼續(xù):假設(shè)現(xiàn)在要造一輛Benze,那做法和上面一樣設(shè)計汽車制造汽車。即:publicclassBenzeCar//設(shè)計汽車{//……publicstringDec(){return"Benze";}}BenzeCarbenze=newBenzeCar();//制造一輛benze汽車注:從上面的例子可以發(fā)現(xiàn),制造商每次要一輛新車,都要重新設(shè)計一下(重復(fù)勞動)。而制造商設(shè)計的每一種汽車,它們之間存在一些共同的特新(比如都是流線性什么的,本人不太懂汽車)。既然有了這些共性,那么把問題高度抽象化來考慮就是,制造商不知道以后需要設(shè)計什么樣的汽車,也不知道以后的汽車會有什么新的特性。但是只要是汽車,都可能會有共同的特性。那么就可以提高效率。用程序表達(dá)出來就是:建一個汽車的抽象類:publicabstractclassCar{//……publicabstractstringDec();//汽車的共性}2.假設(shè)N年后,制造商要設(shè)計一款新車的話:publicclassXXXCar:Car//繼承了原來汽車的一些共性{//……publicoverridestringDec(){return"XXXCar"};//重寫了汽車的一個特性}3.ok新車的設(shè)計好了,我們又可以造車了;XXXCarxxx=newXXXCar();現(xiàn)在的結(jié)構(gòu)如下:===ok,以上所說的都是汽車制造過程中的第一步,及設(shè)計上的。下面來看看汽車制造過程中的問題====簡單工廠模式從程序的角度來看:定義完class后就可以new出該class的實(shí)例。但在處理具體項(xiàng)目的時候,在定義完class后,往往要做一些其他的操作,才能new出該class的實(shí)例。比如類里面一些變量的賦值,條件的判斷等等。當(dāng)然這些操作,可以使用構(gòu)造函數(shù)來實(shí)現(xiàn)。但是如果在一個項(xiàng)目中這個class的實(shí)例如果要多次用到的化,那構(gòu)造函數(shù)就會很復(fù)雜,系統(tǒng)的開銷就很大了;從實(shí)際問題來看:汽車制造商在設(shè)計完汽車后,不可能直接就去制造汽車了,肯定要先對汽車制造過程中用的所有東西進(jìn)行準(zhǔn)備。一切準(zhǔn)備完了后才可以制造汽車。還有如果制造商制造每一輛汽車的時候,都要去準(zhǔn)備一次東西。那肯定是不可能的(除非特殊情況,比如某個明星花錢定做了一輛的汽車。那沒辦法,人家有錢呵呵)。最好的解決辦法就是:建一個工廠,將工作分開,有專門的人去準(zhǔn)備東西。工廠只要負(fù)責(zé)根據(jù)設(shè)計制造汽車就可以。代碼來看就是://還是以buick為例//設(shè)計一個造buick的工廠類PublicclassBuickFactory{//……其他準(zhǔn)備操作PublicBuickCarCreate()//制造汽車;{ReturnnewBuickCar();}}//客戶端代碼BuickFactorybuickfactory=newBuickFactory();//建造一個buick的汽車工廠BuickCarbuick=buickfactory.Create();//結(jié)構(gòu):===以上模式就是簡單工廠模式。抽象工廠模式繼續(xù)進(jìn)一步思考問題:假設(shè)現(xiàn)在制造商不造buick改造benze了。如果用簡單工廠模式的問題就變成了:制造商不但要設(shè)計benze的工廠,還要重新為benze去建個工廠.(簡單工廠模式的弱點(diǎn))Benze工廠類設(shè)計(同buick)://客戶端代碼BenzeFactorybenzefactory=newBenzeFactory();//建造一個benze的汽車工廠BenzeCarbenze=benzefactory.Create();//從上面的代碼可以看出,如果在一個項(xiàng)目中有很多這樣的代碼要修改的話,就會非常麻煩?。磥碇圃焐绦枰獙S進(jìn)行重組了,呵呵)1.從實(shí)際問題來看參見汽車設(shè)計的過程:其實(shí)工廠在制造每種汽車的過程中有很多東西是可以一起處理。即時不能一起處理,處理方式也可能一樣(比如對汽車烤漆的工作)。制造商對工廠的重組就是:建一個汽車工廠,工廠準(zhǔn)備好東西,對不同的汽車開設(shè)不同的生產(chǎn)線來生產(chǎn)。2.將上面的問題解釋到程序上就是:我們設(shè)計一個抽象的工廠類,定義好抽象的方法(烤漆),讓子工廠類去重寫(因?yàn)椴恢烂恳环N車要如何烤漆)3.代碼//設(shè)計抽象工廠類publicabstractclassCarFactory{//;準(zhǔn)備publicabstractCarCreate();//造車}//設(shè)計buick的子工廠類繼承工廠類PublicclassBuickFactory:CarFactory{//;準(zhǔn)備PublicclassCarCreate(){ReturnnewBuickCar();//返回buickcar的實(shí)例}}//設(shè)計benze的子工廠類PublicclassBenzeFactory:CarFactory{//……準(zhǔn)備PublicclassCarCreate()//ReturnnewBenzeCar();//返回benzecar的實(shí)例}}Ok,來看一下具體的代碼調(diào)用:CarFactorycarfactory;//定義一個工廠(此處代碼分開寫看的更清除一些)carfactory=newBuickFactory();//現(xiàn)在要生產(chǎn)buick車,那就開條buick的生產(chǎn)線出來,如果要改造benze的話只要newBenzeFactory()就可以了。Carcar=carfactory.Create();//buick的生產(chǎn)線生成buick了注:其實(shí)對于第三行代碼還有一種寫法:BuickCarbuick=(BuickCar)carfactory.Create();但是這樣在代碼維護(hù)的時候還是要

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論