软件体系结构与设计模式实验9_第1页
软件体系结构与设计模式实验9_第2页
软件体系结构与设计模式实验9_第3页
软件体系结构与设计模式实验9_第4页
软件体系结构与设计模式实验9_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

软件体系结构与设计模式实验9实验报告1、某系统提供了一个数据加密功能,可以对字符串进行加密。最简单的加密算法通过对字母进行移位来实现,同时还提供了稍复杂的逆向输出加密,还提供了更为高级的求模加密。用户先使用最简单的加密算法对字符串进行加密,如果觉得还不够可以对加密之后的结果使用其他加密算法进行二次加密,当然也可以进行第三次加密。现使用装饰模式设计该多重加密系统。(1)UML类图□pmr功iw泊r卜£「83陌心0ph责占phsi■+encryplfStfhg(1)UML类图□pmr功iw泊r卜£「83陌心0ph责占phsi■+encryplfStfhg陟AdaiancedCiphe:r+AjdrarctdCifiheiiCifbercipntij+eclypt.Stringp-aril«rt.»■hmsjd整biigtew*CghipIckC『heri-CartTplesdCipheflCipFerripiherj■+CFCrypTl.&tririgpJ(inTeYt;imerselgtrfrdtaitlCipher■encrypt(5tnnqpJ^inTesri£第*磨普甬i.i*4- pqr™n(5irhq]占rg/.vnid(2)实现代码packagequestionl;/**^^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;}}packagequestionl;/**^^Description:*@Author:Xxx*@Date:2020年5月10日**/publicclassCipherDecoratorimplementsCipher{privateCiphercipher;publicCipherDecorator(Ciphercipher){this.cipher=cipher;}©OverridepublicStringencrypt(StringplainText){returncipher.encrypt(plainText);}packagequestionl;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(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)测试代码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)结果截图AfterSimp1eCipher;jgoreZgtAfterComp1exCipher:tgZerogjAfterAdvancedCipher:413050122、某OA系统采用享元模式设计权限与管理模块,在该模块中,将与系统功能相对应的业务类设计为享元类并将相应的义务对象存储到享元池中(可使用Map实现,key为业务对象对应的权限编码,value为业务对象)。用户身份验证成功后,系统通过存储在数据库中的该用户的权限编码集从享元池获取相应的业务对象并构建权限列表,在界面中显示用户所拥有的权限。(1)UML类图(2)实现代码packagequestion2;/**^^Description:*@Author:Xxx*@Date:2020年5月10日**/publicinterfaceFlyweight{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("业务对象:"+rinsicState);System.out.println("权限列表:"+limitMap.get(rinsicState));}}(3)测试代码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)结果截图<terniindted>Client(13)[JavaApplicatfon]D:\cqdeS0ft5\Jdva.咪务时象在lyw电gh七1权限列买:[001,022]flyweights权限机]表:[110,101]3、某系统需要提供一个文件加密模块,加密流程包括三个操作,分别是读取源文件、加密、保存加密之后的文件。读取文件和保存文件使用流来实现,这三个操作相对独立,其业务代码封装在三个不同的类中。现在需要提供一个统一的加密外观类,用户可以直接使用该加密外观类完成文件的读取、加密和保存三个操作,而不需要与每一个类进行交互,使用外观模式设计该加密模块。(1)UML类图(2)实现代码packagequestion?;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("读取完成”);}}packagequestion?;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("开始对文件内容进行加密......");try{InputStreamReaderiReader=newInputStreamReader(newFilelnputStream(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("加密完成”);}}packagequestion?;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;/***@Description:*@Author:Xxx*@Date:2020年5月10日**/publicclassSaveModule{publicvoidsave(Filefile,Stringpath)(System.out.println("将文件"+file+"保存在"+path);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论