




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
軟件體系結(jié)構(gòu)與設(shè)計(jì)模式實(shí)驗(yàn)9實(shí)驗(yàn)報(bào)告1、某系統(tǒng)提供了一個(gè)數(shù)據(jù)加密功能,可以對(duì)字符串進(jìn)行加密。最簡(jiǎn)單的加密算法通過(guò)對(duì)字母進(jìn)行移位來(lái)實(shí)現(xiàn),同時(shí)還提供了稍復(fù)雜的逆向輸出加密,還提供了更為高級(jí)的求模加密。用戶先使用最簡(jiǎn)單的加密算法對(duì)字符串進(jìn)行加密,如果覺(jué)得還不夠可以對(duì)加密之后的結(jié)果使用其他加密算法進(jìn)行二次加密,當(dāng)然也可以進(jìn)行第三次加密?,F(xiàn)使用裝飾模式設(shè)計(jì)該多重加密系統(tǒng)。1)UML類圖CipHtrCHCflfaieir-dphflr;CiiiberjqMrOcco怕仙pZipgifphpri■+encryplfStfhg曲inlewljAdaiancedCiphe:r+AjdrarctdCipheiiCifbercipntijCipHtrCHCflfaieir-dphflr;CiiiberjqMrOcco怕仙pZipgifphpri■+encryplfStfhg曲inlewljAdaiancedCiphe:r+AjdrarctdCipheiiCifbercipntij+encrrpti.a-trin^p-aFiWrt?■hmnd曽biigCghipIckCph?ri-CartTplesdCipheflCipFerripiherj■+CFCrypTl&tringpJQnTeYt;i-KWWEelStrfrgrbMrtlCipher■*■encrypt(5tnnqpJjinT皀謂4-dmbym哺EE/iSJph佔(zhàn)Ta成|CliWr?n(5irhq]時(shí).曲洶2)實(shí)現(xiàn)代碼packagequestion1;/***@Description:*@Author:Xxx*@Date:2020年5月10日publicinterfaceCipher{Stringencrypt(StringplainText);}packagequestion1;/***@Description:*@Author:Xxx*@Date:2020年5月10日publicclassSimpleCipherimplementsCipher{@OverridepublicStringencrypt(StringplainText){Stringstr="";for(inti=0;i<plainText.length();i++){charc=plainText.charAt(i);if(c>='a'&&c<='z'){c+=6;if(c>'z'){c-=26;}if(c<'a'){c+=26;}}if(c>='A'&&c<='Z'){c+=6;if(c>'Z'){c-=26;}if(c<'A'){c+=26;}}str+=c;}returnstr;}}packagequestion1;/***@Description:*@Author:Xxx*@Date:2020年5月10日publicclassCipherDecoratorimplementsCipher{privateCiphercipher;publicCipherDecorator(Ciphercipher){this.cipher=cipher;}@OverridepublicStringencrypt(StringplainText){returncipher.encrypt(plainText);}packagequestion1;importjava.time.format.ResolverStyle;/***@Description:*@Author:Xxx*@Date:2020年5月10日publicclassComplexCipherextendsCipherDecorator{publicComplexCipher(Ciphercipher){super(cipher);publicStringreverse(Stringtext){Stringstring="";for(inti=text.length();i>0;i--){string+=text.substring(i-1,i);}returnstring;}@OverridepublicStringencrypt(StringplainText){Stringresult=super.encrypt(plainText);result=reverse(result);returnresult;}}packagequestion1;/***@Description:*@Author:Xxx*@Date:2020年5月10日publicclassAdvancedCipherextendsCipherDecorator{publicAdvancedCipher(Ciphercipher){super(cipher);publicStringmod(Stringtext){Stringstr="";for(inti=0;i<text.length();i++){StringcString=String.valueOf(text.charAt(i)%6);str+=cString;}returnstr;publicStringencrypt(StringplainText){Stringresult=super.encrypt(plainText);result=mod(result);returnresult;}}(3)測(cè)試代碼packagequestion1;/***@Description:*@Author:Xxx*@Date:2020年5月10日publicclassClient{publicstaticvoidmain(String[]args){Stringpassword="dailyTan";Stringcpasswd;Ciphersc,cc,ac;sc=newSimpleCipher();cpasswd=sc.encrypt(password);System.out.println("AfterSimpleCipher:"+cpasswd);cc=newComplexCipher(sc);cpasswd=cc.encrypt(password);System.out.println("AfterComplexCipher:"+cpasswd);ac=newAdvancedCipher(sc);cpasswd=ac.encrypt(password);System.out.println("AfterAdvancedCipher:"+cpasswd);}
(4)結(jié)果截圖AfterSimp1eCipher;jgoreZgtAftprComp1exCipher:tgZerogjAfterAdvancedCipher:413050122、某OA系統(tǒng)采用享元模式設(shè)計(jì)權(quán)限與管理模塊,在該模塊中,將與系統(tǒng)功能相對(duì)應(yīng)的業(yè)務(wù)類設(shè)計(jì)為享元類并將相應(yīng)的義務(wù)對(duì)象存儲(chǔ)到享元池中(可使用Map實(shí)現(xiàn),key為業(yè)務(wù)對(duì)象對(duì)應(yīng)的權(quán)限編碼,value為業(yè)務(wù)對(duì)象)。用戶身份驗(yàn)證成功后,系統(tǒng)通過(guò)存儲(chǔ)在數(shù)據(jù)庫(kù)中的該用戶的權(quán)限編碼集從享元池獲取相應(yīng)的業(yè)務(wù)對(duì)象并構(gòu)建權(quán)限列表,在界面中顯示用戶所擁有的權(quán)限。(1)UML類圖(2)實(shí)現(xiàn)代碼packagequestion2;/***@Description:*@Author:Xxx*@Date:2020年5月10日**/{voidaddLimit(Stringlimit);{voidaddLimit(Stringlimit);voidoperation();}packagequestion2;importjava.awt.List;importjava.util.HashMap;importjava.util.Map;}}/***@Description:*@Author:Xxx*@Date:2020年5月10日**/publicclassFlyweightFactory{privateMap<String,Flyweight>flyweights=newHashMap<>();publicFlyweightgetFlyweight(Stringkey){if(!flyweights.containsKey(key)){Flyweightflyweight=newConcreteFlyweight(key);flyweights.put(key,flyweight);}returnflyweights.get(key);}}packagequestion2;importjava.awt.List;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.Map;/***@Description:*@Author:Xxx*@Date:2020年5月10日**/publicclassConcreteFlyweightimplementsFlyweight{privateStringintrinsicState;privateMap<String,ArrayList<String>>limitMap=newHashMap<>();privateArrayListlimits=newArrayList();publicvoidsetIntrinsicState(StringintrinsicState){rinsicState=intrinsicState;}publicArrayListgetLimits(){returnlimits;}publicvoidsetLimits(ArrayListlimits){this.limits=limits;publicMap<String,ArrayList<String>>getLimitMap(){returnlimitMap;}publicvoidsetLimitMap(Map<String,ArrayList<String>>limitMap){this.limitMap=limitMap;}publicStringgetIntrinsicState(){returnintrinsicState;}publicConcreteFlyweight(StringintrinsicState){rinsicState=intrinsicState;}@OverridepublicvoidaddLimit(Stringlimit){limits.add(limit);limitMap.put(rinsicState,limits);}@Overridepublicvoidoperation(){System.out.print("業(yè)務(wù)對(duì)象:"+rinsicState);System.out.println("權(quán)限列表:"+limitMap?get(rinsicState));}3)測(cè)試代碼packagequestion2;/***@Description:*@Author:Xxx*@Date:2020年5月10日publicclassClient{publicstaticvoidmain(String[]args){FlyweightFactoryflyweightFactory=newFlyweightFactory();Flyweightflyweight1=flyweightFactory.getFlyweight("flyweight1");flyweight1.addLimit("001");flyweight1.addLimit("022");flyweight1.operation();Flyweightflyweight2=flyweightFactory.getFlyweight("flyweight2");flyweight2.addLimit("110");flyweight2.addLimit("101");flyweight2.operation();}}(4)結(jié)果截圖<terniindted>Client(13)[JavaApplicatfon]D:\cqdeS0ft5\Jdva.業(yè)務(wù)對(duì)象:flyweightl權(quán)限列衷:[00匚022]業(yè)務(wù)?(寸象:flyw巳叔限期]表:101]3、某系統(tǒng)需要提供一個(gè)文件加密模塊,加密流程包括三個(gè)操作,分別是讀取源文件、加密、保存加密之后的文件。讀取文件和保存文件使用流來(lái)實(shí)現(xiàn),這三個(gè)操作相對(duì)獨(dú)立,其業(yè)務(wù)代碼封裝在三個(gè)不同的類中?,F(xiàn)在需要提供一個(gè)統(tǒng)一的加密外觀類,用戶可以直接使用該加密外觀類完成文件的讀取、加密和保存三個(gè)操作,而不需要與每一個(gè)類進(jìn)行交互,使用外觀模式設(shè)計(jì)該加密模塊。1)UML類圖(2)實(shí)現(xiàn)代碼packagequestion3;importjava.io.BufferedReader;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileReader;importjava.io.InputStreamReader;/***@Description:*@Author:Xxx*@Date:2020年5月10日publicclassReadModule{publicvoidread(Filefile){System.out.println("開始讀取文件:"+file);System.out.println("start");try{InputStreamReaderiReader=newInputStreamReader(newFileInputStream(file),"utf-8");BufferedReaderbReader=newBufferedReader(iReader);Stringtext=null;while((text=bReader.readLine())!=null){System.out.println(text);}bReader.close();}catch(Exceptione){e.printStackTrace();}System.out.println("end");System.out.println("讀取完成");}}packagequestion3;importjava.io.BufferedReader;importjava.io.BufferedWriter;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.FileWriter;importjava.io.InputStreamReader;*@Description:*@Author:Xxx*@Date:2020年5月10日publicclassEncrytModule{publicStringdoEncrypt(Stringtext){Stringstr="";for(inti=0;i<text.length();i++){StringcString=String.valueOf(text.charAt(i)%6);str+=cString;}returnstr;}publicvoidencrypt(Filefile){System.out.println("開始對(duì)文件內(nèi)容進(jìn)行加密......");try{InputStreamReaderiReader=newInputStreamReader(newFileInputStream(file),"utf-8");BufferedReaderbReader=newBufferedReader(iReader);Stringtext=null;while((text=bReader.readLine())!=null){System.out.println(doEncrypt(text));}bReader.close();}catch(Exceptione){e.printStackTrace();}System.out.println("加密完成");}}packagequestion3;importjava.io.File;importjava.io.FilelnputStream;importjava.io.FileOutputStream;/***@Description:*@Author:Xxx*@Date:2020年5月10日
publicclassSaveModule{publicvoidsave(Filefile,Stringpath){System.out.println(”將文件"+file+"保存在"+path);}}packagequestion3;
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 道路修建合同范本
- 員工家屬安全合同范本
- 2024年秋新人教版八年級(jí)上冊(cè)物理教學(xué)課件 第三章 物態(tài)變化 第1節(jié) 溫度
- 設(shè)施規(guī)劃 第2版 課件全套 第1-7章 緒論-設(shè)施布置問(wèn)題求解及其計(jì)算機(jī)輔助設(shè)計(jì)和仿真
- 浙江國(guó)企招聘2024衢州龍游經(jīng)濟(jì)開發(fā)區(qū)下屬國(guó)資公司招聘8人筆試參考題庫(kù)附帶答案詳解
- 2025屆九師聯(lián)盟高三12月聯(lián)考(11月質(zhì)量檢測(cè))英語(yǔ)試題(含答案)
- 重癥疾病護(hù)理常規(guī)
- 培訓(xùn)新護(hù)士課件
- 2025至2030年中國(guó)口杯原紙數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 生產(chǎn)流程項(xiàng)目改善
- 免疫性血小板減少性紫癜36張課件
- 10-化學(xué)動(dòng)力學(xué)基礎(chǔ)-1-考研試題資料系列
- 工傷保險(xiǎn)待遇核定表(樣表)
- DB33- 1015-2021《居住建筑節(jié)能設(shè)計(jì)標(biāo)準(zhǔn)》
- DB1310T 225-2020 木本植物滯納空氣顆粒物能力測(cè)定方法
- (高職)國(guó)際金融(第四版)電子課件(全套)
- 《飲料工藝學(xué)》課件第一章-緒論
- 中外合作辦學(xué)的可行性報(bào)告
- 母嬰保健課程標(biāo)準(zhǔn)
- 《農(nóng)民專業(yè)合作社登記管理?xiàng)l例》條文解讀(一
- 一年級(jí)的小豌豆我喜歡的一本書(課堂PPT)
評(píng)論
0/150
提交評(píng)論