版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 貴州大學(xué)《電電子基礎(chǔ)訓(xùn)練》2023-2024學(xué)年第一學(xué)期期末試卷
- 貴州財(cái)經(jīng)大學(xué)《人文地理學(xué)基本問(wèn)題》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年陜西省建筑安全員考試題庫(kù)
- 貴陽(yáng)信息科技學(xué)院《管理學(xué)精要》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣州珠江職業(yè)技術(shù)學(xué)院《組合與運(yùn)籌》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025海南省建筑安全員B證考試題庫(kù)及答案
- 2025福建省安全員考試題庫(kù)附答案
- 廣州幼兒師范高等專(zhuān)科學(xué)校《高級(jí)聽(tīng)說(shuō)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣州新華學(xué)院《量子力學(xué)(Ⅱ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣州衛(wèi)生職業(yè)技術(shù)學(xué)院《曲式與作品分析Ⅰ》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年中國(guó)陶瓷碗盆市場(chǎng)調(diào)查研究報(bào)告
- ISO 56001-2024《創(chuàng)新管理體系-要求》專(zhuān)業(yè)解讀與應(yīng)用實(shí)踐指導(dǎo)材料之22:“8運(yùn)行-8.1運(yùn)行策劃和控制”(雷澤佳編制-2025B0)
- 單位網(wǎng)絡(luò)安全攻防演練
- 神經(jīng)外科基礎(chǔ)護(hù)理課件
- 2024中國(guó)儲(chǔ)備糧管理集團(tuán)限公司招聘700人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 內(nèi)蒙古赤峰市2023-2024學(xué)年高一上學(xué)期期末考試物理試題(含答案)
- 建筑工程機(jī)械設(shè)備安全技術(shù)操作規(guī)程
- 2024年中國(guó)心力衰竭診斷和治療指南2024版
- HCCDP 云遷移認(rèn)證理論題庫(kù)
- 臺(tái)大公開(kāi)課--《紅樓夢(mèng)》筆記剖析
- 底總結(jié)報(bào)告2017年初開(kāi)場(chǎng)計(jì)劃策劃模版圖文可隨意編輯修改課件
評(píng)論
0/150
提交評(píng)論