深入淺出設(shè)計(jì)模式中文版第03章_第1頁(yè)
深入淺出設(shè)計(jì)模式中文版第03章_第2頁(yè)
深入淺出設(shè)計(jì)模式中文版第03章_第3頁(yè)
深入淺出設(shè)計(jì)模式中文版第03章_第4頁(yè)
深入淺出設(shè)計(jì)模式中文版第03章_第5頁(yè)
已閱讀5頁(yè),還剩1頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第03章:簡(jiǎn)單工廠模式——輕松實(shí)現(xiàn)對(duì)象的創(chuàng)建與管理在設(shè)計(jì)軟件時(shí),我們常常會(huì)遇到這樣一個(gè)問(wèn)題:如何在不暴露創(chuàng)建邏輯的情況下創(chuàng)建對(duì)象?簡(jiǎn)單工廠模式為我們提供了一種解決方案。本章將帶領(lǐng)大家深入了解簡(jiǎn)單工廠模式,學(xué)會(huì)如何輕松地實(shí)現(xiàn)對(duì)象的創(chuàng)建與管理。一、簡(jiǎn)單工廠模式的定義簡(jiǎn)單工廠模式(SimpleFactoryPattern),又稱(chēng)靜態(tài)工廠方法模式,它屬于創(chuàng)建型模式。在簡(jiǎn)單工廠模式中,我們定義一個(gè)工廠類(lèi),根據(jù)傳入的參數(shù)來(lái)創(chuàng)建并返回不同類(lèi)型的對(duì)象。這樣,客戶(hù)端只需知道需要哪個(gè)產(chǎn)品,而無(wú)需關(guān)心產(chǎn)品的創(chuàng)建過(guò)程。二、簡(jiǎn)單工廠模式的結(jié)構(gòu)1.工廠類(lèi)(Factory):負(fù)責(zé)實(shí)現(xiàn)創(chuàng)建所有產(chǎn)品實(shí)例的內(nèi)部邏輯。工廠類(lèi)可以被外界直接調(diào)用,創(chuàng)建所需的產(chǎn)品對(duì)象。2.抽象產(chǎn)品類(lèi)(Product):定義產(chǎn)品的接口,是所有產(chǎn)品類(lèi)的父類(lèi)。3.具體產(chǎn)品類(lèi)(ConcreteProduct):實(shí)現(xiàn)抽象產(chǎn)品類(lèi)定義的接口,具體的產(chǎn)品類(lèi)。三、簡(jiǎn)單工廠模式的實(shí)現(xiàn)步驟下面我們通過(guò)一個(gè)實(shí)例來(lái)講解簡(jiǎn)單工廠模式的實(shí)現(xiàn)步驟:假設(shè)有一個(gè)手機(jī)生產(chǎn)工廠,可以生產(chǎn)蘋(píng)果手機(jī)(ApplePhone)和安卓手機(jī)(AndroidPhone)。1.定義抽象產(chǎn)品類(lèi)——手機(jī)類(lèi)(Phone)publicabstractclassPhone{publicabstractvoidproduce();}2.定義具體產(chǎn)品類(lèi)——蘋(píng)果手機(jī)類(lèi)(ApplePhone)和安卓手機(jī)類(lèi)(AndroidPhone)publicclassApplePhoneextendsPhone{Overridepublicvoidproduce(){System.out.println("生產(chǎn)蘋(píng)果手機(jī)");}}publicclassAndroidPhoneextendsPhone{Overridepublicvoidproduce(){System.out.println("生產(chǎn)安卓手機(jī)");}}3.定義工廠類(lèi)——手機(jī)工廠類(lèi)(PhoneFactory)publicclassPhoneFactory{publicstaticPhonecreatePhone(Stringtype){Phonephone=null;if("apple".equals(type)){phone=newApplePhone();}elseif("android".equals(type)){phone=newAndroidPhone();}returnphone;}}4.客戶(hù)端調(diào)用publicclassClient{publicstaticvoidmain(Stringargs){Phonephone=PhoneFactory.createPhone("apple");if(phone!=null){duce();}}}四、簡(jiǎn)單工廠模式的優(yōu)點(diǎn)1.解耦性強(qiáng):客戶(hù)端與具體的產(chǎn)品類(lèi)實(shí)現(xiàn)解耦,客戶(hù)端只需知道所需產(chǎn)品的類(lèi)名或參數(shù)即可,無(wú)需關(guān)心產(chǎn)品類(lèi)的具體實(shí)現(xiàn)。2.易于維護(hù):由于所有產(chǎn)品的創(chuàng)建邏輯都集中在工廠類(lèi)中,當(dāng)需要增加新的產(chǎn)品時(shí),只需修改工廠類(lèi),而無(wú)需修改客戶(hù)端代碼,降低了系統(tǒng)復(fù)雜性和維護(hù)成本。3.簡(jiǎn)化客戶(hù)端調(diào)用:客戶(hù)端無(wú)需知道產(chǎn)品類(lèi)的創(chuàng)建過(guò)程,只需通過(guò)工廠類(lèi)提供的靜態(tài)方法即可獲取產(chǎn)品實(shí)例,簡(jiǎn)化了客戶(hù)端的調(diào)用。五、簡(jiǎn)單工廠模式的缺點(diǎn)盡管簡(jiǎn)單工廠模式有許多優(yōu)點(diǎn),但它也存在一些不足之處:1.擴(kuò)展性差:當(dāng)需要增加新的產(chǎn)品時(shí),必須修改工廠類(lèi)的代碼,違反了開(kāi)閉原則(對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉)。2.工廠類(lèi)職責(zé)過(guò)重:隨著產(chǎn)品類(lèi)的增多,工廠類(lèi)中的邏輯會(huì)變得復(fù)雜,導(dǎo)致工廠類(lèi)過(guò)于龐大,難以維護(hù)。3.不利于繼承:簡(jiǎn)單工廠模式通常使用靜態(tài)方法,這使得工廠類(lèi)無(wú)法通過(guò)繼承的方式進(jìn)行擴(kuò)展。六、簡(jiǎn)單工廠模式的應(yīng)用場(chǎng)景1.產(chǎn)品種類(lèi)較少:當(dāng)產(chǎn)品種類(lèi)較少,且不會(huì)頻繁增加時(shí),使用簡(jiǎn)單工廠模式可以簡(jiǎn)化對(duì)象的創(chuàng)建過(guò)程。2.客戶(hù)端不關(guān)心產(chǎn)品的創(chuàng)建過(guò)程:客戶(hù)端只需知道如何使用產(chǎn)品,而不關(guān)心產(chǎn)品的具體實(shí)現(xiàn)。3.工廠類(lèi)邏輯簡(jiǎn)單:當(dāng)工廠類(lèi)的創(chuàng)建邏輯較為簡(jiǎn)單,不會(huì)導(dǎo)致工廠類(lèi)過(guò)于龐大時(shí),可以考慮使用簡(jiǎn)單工廠模式。八、簡(jiǎn)單工廠模式的實(shí)際案例為了讓大家更好地理解簡(jiǎn)單工廠模式,我們來(lái)看一個(gè)生活中的實(shí)際案例:披薩店。想象一下,你走進(jìn)一家披薩店,店里有各種口味的披薩,如margherita、pepperoni和BBQ。你只需要告訴服務(wù)員你想要什么口味的披薩,而不需要知道披薩是如何制作的。//抽象產(chǎn)品類(lèi)interfacePizza{voidprepare();voidbake();voidcut();voidbox();}//具體產(chǎn)品類(lèi)classMargheritaPizzaimplementsPizza{publicvoidprepare(){//}publicvoidbake(){//}publicvoidcut(){//}publicvoidbox(){//}}classPepperoniPizzaimplementsPizza{publicvoidprepare(){//}publicvoidbake(){//}publicvoidcut(){//}publicvoidbox(){//}}//工廠類(lèi)classPizzaStore{publicPizzaorderPizza(Stringtype){Pizzapizza=null;if(type.equals("margherita")){pizza=newMargheritaPizza();}elseif(type.equals("pepperoni")){pizza=newPepperoniPizza();}//其他產(chǎn)品創(chuàng)建邏輯pizza.prepare();pizza.bake();pizza.cut();pizza.box();returnpizza;}}在這個(gè)例子中,`PizzaStore`類(lèi)扮演了工廠的角色,根據(jù)客戶(hù)的需求(`type`參數(shù))來(lái)創(chuàng)建并返回相應(yīng)的`Pizza`對(duì)象??蛻?hù)無(wú)需關(guān)心披薩是如何制作的,只需享受美味的披薩。九、簡(jiǎn)單工廠模式的變體在實(shí)際應(yīng)用中,簡(jiǎn)單工廠模式可以根據(jù)具體需求進(jìn)行一些變體。例如,我們可以將工廠類(lèi)的方法設(shè)置為靜態(tài)的,這樣就不需要?jiǎng)?chuàng)建工廠類(lèi)的實(shí)例,直接通過(guò)類(lèi)名調(diào)用靜態(tài)方法即可。這種變體在某些情況下可以進(jìn)

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論