第章 簡單工廠模式Java_第1頁
第章 簡單工廠模式Java_第2頁
第章 簡單工廠模式Java_第3頁
第章 簡單工廠模式Java_第4頁
第章 簡單工廠模式Java_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第4章簡單工廠模式本章教學(xué)內(nèi)容

創(chuàng)建型模式創(chuàng)建型模式概述創(chuàng)建型模式簡介簡單工廠模式模式動(dòng)機(jī)與定義模式結(jié)構(gòu)與分析模式實(shí)例與解析模式效果與應(yīng)用模式擴(kuò)展創(chuàng)建型模式創(chuàng)建型模式概述創(chuàng)建型模式(CreationalPattern)對(duì)類的實(shí)例化過程進(jìn)行了抽象,能夠?qū)④浖K中對(duì)象的創(chuàng)建和對(duì)象的使用分離。為了使軟件的結(jié)構(gòu)更加清晰,外界對(duì)于這些對(duì)象只需要知道它們共同的接口,而不清楚其具體的實(shí)現(xiàn)細(xì)節(jié),使整個(gè)系統(tǒng)的設(shè)計(jì)更加符合單一職責(zé)原則。創(chuàng)建型模式創(chuàng)建型模式概述創(chuàng)建型模式在創(chuàng)建什么(What),由誰創(chuàng)建(Who),何時(shí)創(chuàng)建(When)等方面都為軟件設(shè)計(jì)者提供了盡可能大的靈活性。創(chuàng)建型模式隱藏了類的實(shí)例的創(chuàng)建細(xì)節(jié),通過隱藏對(duì)象如何被創(chuàng)建和組合在一起達(dá)到使整個(gè)系統(tǒng)獨(dú)立的目的。創(chuàng)建型模式想吃蘋果!?創(chuàng)建型模式概述創(chuàng)建型模式通常獲取蘋果的兩種方式自己種蘋果樹去超市買創(chuàng)建型模式概述創(chuàng)建型模式簡單工廠模式(SimpleFactory)

工廠方法模式(FactoryMethod)抽象工廠模式(AbstractFactory)

原型模式(Prototype)單例模式(Singleton)建造者模式(Builder)創(chuàng)建型模式簡介簡單工廠模式模式動(dòng)機(jī)只要說出水果的名字就能得到想要的水果。簡單工廠模式模式動(dòng)機(jī)考慮一個(gè)簡單的軟件應(yīng)用場景,一個(gè)軟件系統(tǒng)可以提供多個(gè)外觀不同的按鈕(如圓形按鈕、矩形按鈕、菱形按鈕等),這些按鈕都源自同一個(gè)基類,不過在繼承基類后不同的子類修改了部分屬性從而使得它們可以呈現(xiàn)不同的外觀,如果我們希望在使用這些按鈕時(shí),不需要知道這些具體按鈕類的名字,只需要知道表示該按鈕類的一個(gè)參數(shù),并提供一個(gè)調(diào)用方便的方法,把該參數(shù)傳入方法即可返回一個(gè)相應(yīng)的按鈕對(duì)象,此時(shí),就可以使用簡單工廠模式。簡單工廠模式模式定義簡單工廠模式(SimpleFactoryPattern):又稱為靜態(tài)工廠方法(StaticFactoryMethod)模式,它屬于類創(chuàng)建型模式。在簡單工廠模式中,可以根據(jù)自變量的不同返回不同類的實(shí)例。簡單工廠模式專門定義一個(gè)類來負(fù)責(zé)創(chuàng)建其他類的實(shí)例,被創(chuàng)建的實(shí)例通常都具有共同的父類。簡單工廠廠模式模式結(jié)構(gòu)構(gòu)簡單工廠廠模式模式結(jié)構(gòu)構(gòu)簡單工廠廠模式包包含如下下角色::Factory:工廠角角色Product:抽象產(chǎn)產(chǎn)品角色色ConcreteProduct:具體產(chǎn)產(chǎn)品角色色簡單工廠廠模式模式分析析分析如下下代碼::publicvoidpay(Stringtype){if(type.equalsIgnoreCase("cash")){//現(xiàn)金支付處理代碼}elseif(type.equalsIgnoreCase("creditcard")){//信用卡支付處理代碼}elseif(type.equalsIgnoreCase("voucher")){//代金券支付處理代碼}else{……}}代碼復(fù)雜雜,難以以維護(hù)簡單工廠廠模式模式分析析重構(gòu)后的的代碼::publicabstractclassAbstractPay{publicabstractvoidpay();}publicclassCashPayextendsAbstractPay{publicvoidpay(){//現(xiàn)金支付處理代碼}}抽象支付付類具體支付付類簡單工廠廠模式模式分析析重構(gòu)后的的代碼::publicclassPayMethodFactory{publicstaticAbstractPaygetPayMethod(Stringtype){if(type.equalsIgnoreCase("cash")){returnnewCashPay();//根據(jù)參數(shù)創(chuàng)建具體產(chǎn)品}elseif(type.equalsIgnoreCase("creditcard")){returnnewCreditcardPay();//根據(jù)參數(shù)創(chuàng)建具體產(chǎn)品}……}}支付工廠廠簡單工廠廠模式模式分析析將對(duì)象的的創(chuàng)建和和對(duì)象本本身業(yè)務(wù)務(wù)處理分分離可以以降低系統(tǒng)統(tǒng)的耦合合度,使得兩兩者修改改起來都都相對(duì)容容易。在調(diào)用工工廠類的的工廠方方法時(shí),,由于工工廠方法法是靜態(tài)態(tài)方法,,使用起起來很方方便,可可通過類類名直接接調(diào)用,,而且只只需要傳傳入一個(gè)個(gè)簡單的的參數(shù)即即可,在在實(shí)際開開發(fā)中,,還可以以在調(diào)用用時(shí)將所所傳入的的參數(shù)保保存在XML等格式的的配置文文件中,,修改參參數(shù)時(shí)無無需修改改任何Java源代碼。。簡單工廠廠模式最最大的問問題在于于工廠類的的職責(zé)相相對(duì)過重重,增加新新的產(chǎn)品品需要修修改工廠廠類的判判斷邏輯輯,這一一點(diǎn)與開開閉原則則是相違違背的。。簡單工廠廠模式的的要點(diǎn)在在于:當(dāng)你需要要什么,,只需要要傳入一一個(gè)正確確的參數(shù)數(shù),就可可以獲取取你所需需要的對(duì)對(duì)象,而而無需知知道其創(chuàng)創(chuàng)建細(xì)節(jié)節(jié)。簡單工廠廠模式模式實(shí)例例與解析析實(shí)例一::簡單電電視機(jī)工工廠某電視機(jī)機(jī)廠專為為各知名名電視機(jī)機(jī)品牌代代工生產(chǎn)產(chǎn)各類電電視機(jī),,當(dāng)需要要海爾牌牌電視機(jī)機(jī)時(shí)只需需要在調(diào)調(diào)用該工工廠的工工廠方法法時(shí)傳入入?yún)?shù)““Haier”,需要海海信電視視機(jī)時(shí)只只需要傳傳入?yún)?shù)數(shù)“Hisense”,工廠可可以根據(jù)據(jù)傳入的的不同參參數(shù)返回回不同品品牌的電電視機(jī)?!,F(xiàn)使用用簡單工工廠模式式來模擬擬該電視視機(jī)工廠廠的生產(chǎn)產(chǎn)過程。。簡單工廠廠模式模式實(shí)例例與解析析實(shí)例一::簡單電電視機(jī)工工廠簡單工廠廠模式模式實(shí)例例與解析析實(shí)例一::簡單電電視機(jī)工工廠參考代碼碼演示……簡單工廠廠模式模式實(shí)例例與解析析實(shí)例二::權(quán)限管管理在某OA系統(tǒng)中,,系統(tǒng)根根據(jù)對(duì)比比用戶在在登錄時(shí)時(shí)輸入的的賬號(hào)和和密碼以以及在數(shù)數(shù)據(jù)庫中中存儲(chǔ)的的賬號(hào)和和密碼是是否一致致來進(jìn)行行身份驗(yàn)驗(yàn)證,如如果驗(yàn)證證通過,,則取出出存儲(chǔ)在在數(shù)據(jù)庫庫中的用用戶權(quán)限限等級(jí)((以整數(shù)數(shù)形式存存儲(chǔ)),,根據(jù)不不同的權(quán)權(quán)限等級(jí)級(jí)創(chuàng)建不不同等級(jí)級(jí)的用戶戶對(duì)象,,不同等等級(jí)的用用戶對(duì)象象擁有不不同的操操作權(quán)限限?,F(xiàn)使使用簡單單工廠模模式來設(shè)設(shè)計(jì)該權(quán)權(quán)限管理理模塊。。簡單工廠廠模式模式實(shí)例例與解析析實(shí)例二::權(quán)限管管理簡單工廠廠模式模式實(shí)例例與解析析實(shí)例二::權(quán)限管管理參考代碼碼演示……簡單工廠廠模式模式優(yōu)缺缺點(diǎn)簡單工廠廠模式的的優(yōu)點(diǎn)如如下:工廠類含含有必要要的判斷斷邏輯,,可以決決定在什什么時(shí)候候創(chuàng)建哪哪一個(gè)產(chǎn)產(chǎn)品類的的實(shí)例,,客戶端端可以免免除直接接創(chuàng)建產(chǎn)產(chǎn)品對(duì)象象的責(zé)任任,而僅僅僅“消消費(fèi)”產(chǎn)產(chǎn)品;簡簡單工廠廠模式通通過這種種做法實(shí)現(xiàn)了對(duì)對(duì)責(zé)任的的分割,,它提供供了專門門的工廠廠類用于于創(chuàng)建對(duì)對(duì)象??蛻舳藷o無需知道道所創(chuàng)建建的具體體產(chǎn)品類類的類名名,只需需要知道道具體產(chǎn)產(chǎn)品類所所對(duì)應(yīng)的的參數(shù)即即可,對(duì)于一一些復(fù)雜雜的類名名,通過過簡單工工廠模式式可以減減少使用用者的記記憶量。。通過引入入配置文文件,可可以在不不修改任任何客戶戶端代碼碼的情況況下更換換和增加加新的具具體產(chǎn)品品類,在一定定程度上上提高了了系統(tǒng)的的靈活性性。簡單工廠廠模式模式優(yōu)缺缺點(diǎn)簡單工廠廠模式的的缺點(diǎn)如如下:由于工廠類集集中了所所有產(chǎn)品品創(chuàng)建邏邏輯,一旦不不能正常常工作,,整個(gè)系系統(tǒng)都要要受到影影響。使用簡單單工廠模模式將會(huì)會(huì)增加系統(tǒng)統(tǒng)中類的的個(gè)數(shù),在一定定程序上上增加了了系統(tǒng)的的復(fù)雜度度和理解解難度。。系統(tǒng)擴(kuò)展展困難,,一旦添添加新產(chǎn)產(chǎn)品就不不得不修修改工廠廠邏輯,,在產(chǎn)品品類型較較多時(shí),有可能能造成工工廠邏輯輯過于復(fù)復(fù)雜,不不利于系系統(tǒng)的擴(kuò)擴(kuò)展和維維護(hù)。簡單工廠廠模式由由于使用用了靜態(tài)態(tài)工廠方方法,造造成工廠角色色無法形形成基于于繼承的的等級(jí)結(jié)結(jié)構(gòu)。簡單工廠廠模式模式適用用環(huán)境在以下情情況下可可以使用用簡單工工廠模式式:工廠類負(fù)負(fù)責(zé)創(chuàng)建建的對(duì)象象比較少少:由于創(chuàng)創(chuàng)建的對(duì)對(duì)象較少少,不會(huì)會(huì)造成工工廠方法法中的業(yè)業(yè)務(wù)邏輯輯太過復(fù)復(fù)雜;客戶端只只知道傳傳入工廠廠類的參參數(shù),對(duì)對(duì)于如何何創(chuàng)建對(duì)對(duì)象不關(guān)關(guān)心:客戶端既不不需要關(guān)心創(chuàng)創(chuàng)建細(xì)節(jié),甚甚至連類名都都不需要記住住,只需要知知道類型所對(duì)對(duì)應(yīng)的參數(shù)。。簡單工廠模式式模式應(yīng)用(1)在JDK類庫中廣泛使使用了簡單工工廠模式,如如工具類,它用于格式式化一個(gè)本地地日期或者時(shí)時(shí)間。publicfinalstaticDateFormatgetDateInstance();publicfinalstaticDateFormatgetDateInstance(intstyle);publicfinalstaticDateFormatgetDateInstance(intstyle,Localelocale);簡單工廠模式式模式應(yīng)用(2)Java密碼學(xué)參考代碼:DESEncrypt.java//獲取不同加密算法的密鑰生成器KeyGeneratorkeyGen=KeyGenerator.getInstance("DESede");//創(chuàng)建密碼器Ciphercp=Cipher.getInstance("DESede");簡單工廠模式式模式擴(kuò)展簡單工廠模式式的簡化:在有些情況下下工廠類可以以由抽象產(chǎn)品品角色扮演,,一個(gè)抽象產(chǎn)產(chǎn)品類同時(shí)也也是子類的工工廠,也就是是說把靜態(tài)工工廠方法寫到到抽象產(chǎn)品類類中。本章小結(jié)創(chuàng)建型模式對(duì)對(duì)類的實(shí)例化化過程進(jìn)行了了抽象,能夠夠?qū)?duì)象的創(chuàng)創(chuàng)建與對(duì)象的的使用過程分分離。簡單工廠模式式又稱為靜態(tài)態(tài)工廠方法模模式,它屬于于類創(chuàng)建型模模式。在簡單單工廠模式中中,可以根據(jù)據(jù)自變量的不不同返回不同同類的實(shí)例。。簡單工廠模模式專門定義義一個(gè)類來負(fù)負(fù)責(zé)創(chuàng)建其他他類的實(shí)例,,被創(chuàng)建的實(shí)實(shí)例通常都具具有共同的父父類。簡單工廠模式式包含三個(gè)角角色:工廠角角色負(fù)責(zé)實(shí)現(xiàn)現(xiàn)創(chuàng)建所有實(shí)實(shí)例的內(nèi)部邏邏輯;抽象產(chǎn)產(chǎn)品角色是所所創(chuàng)建的所有有對(duì)象的父類類,負(fù)責(zé)描述述所有實(shí)例所所共有的公共共接口;具體體產(chǎn)品角色是是創(chuàng)建目標(biāo),,所有創(chuàng)建的的對(duì)象都充當(dāng)當(dāng)這個(gè)角色的的某個(gè)具體類類的實(shí)例。本章小結(jié)簡單工廠模式式的要點(diǎn)在于于:當(dāng)你需要要什么,只需需要傳入一個(gè)個(gè)正確的參數(shù)數(shù),就可以獲獲取你所需要要的對(duì)象,而而無

溫馨提示

  • 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)論