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

下載本文檔

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

文檔簡介

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

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

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

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

溫馨提示

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

評論

0/150

提交評論