




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
结构型设计模式实验1.适配器模式实例之算法适配现有⼀个接⼝DataOperation定义了排序⽅法sort(int[])和查找⽅法search(int[],int),已知类QuickSort的quickSort(int[])⽅法实现了快速排序算法,类BinarySearch的binarySearch(int[],int)⽅法实现了⼆分查找算法。现使⽤适配器模式设计⼀个系统,在不修改源代码的情况下将类QuickSort和类BinarySearch的⽅法适配到DataOperation接⼝中。绘制类图并编程实现。2.桥接模式实例之跨平台视频播放器如果需要开发⼀个跨平台视频播放器,可以在不同操作系统平台(如Windows、Linux、Unix等)上播放多种格式的视频⽂件,如MPEG、RMVB、AVI、WMV等常见视频格式。现使⽤桥接模式设计该播放器。3.组合模式实例之杀毒软件使⽤组合模式设计⼀个杀毒软件(AntiVirus)的框架,该软件既可以对某个⽂件夹(Folder)杀毒,也可以对某个指定的⽂件(File)进⾏杀毒,⽂件种类包括⽂本包括TextFile、图⽚⽂件ImageFile、视频⽂件VideoFile。绘制类图并编程模拟实现。4.装饰模式实例之界⾯显⽰构件库某软件公司基于⾯向对象技术开发了⼀套图形界⾯显⽰构件库VisualComponent。在使⽤该库构建某图形界⾯时,⽤户要求为界⾯定制⼀些特效显⽰效果,如带滚动条的窗体或透明窗体等。现使⽤装饰模式设计该构件库,绘制类图并编程模拟实现。5.外观模式实例之⽂件加密某系统需要提供⼀个⽂件加密模块,加密流程包括三个操作,分别是读取源⽂件、加密、保存加密之后的⽂件。读取⽂件和保存⽂件使⽤流来实现,这三个操作相对独⽴,其业务代码封装在三个不同的类中。现在需要提供⼀个统⼀的加密外观类,⽤户可以直接使⽤该加密外观类完成⽂件的读取、加密和保存三个操作,⽽不需要与每⼀个类交互,使⽤外观模式设计该加密模块,要求编程模拟实现。6.代理模式实例之⽇志记录代理在某应⽤软件中需要记录业务⽅法的调⽤⽇志,在不修改现有业务类的基础上为每⼀个类提供⼀个⽇志记录代理类,在中输出⽇志,如在业务⽅法method()调⽤之前输出“⽅法method()被调⽤,调⽤时间为2012-10-1010:10:10”,调⽤之后如果没有抛异常则输出⽅法“⽅法method()调⽤成功”,否则输出“⽅法method()调⽤失败”。在代理类中调⽤真实业务类的业务⽅法,使⽤代理模式设计该⽇志记录模块结构,绘制类图并编程模拟实现。⼀.适配器模式类图代码:publicinterfaceDataOperation{//⽬标类publicvoidsort(intsort[],inti,intj);publicintsearch(intsearch[],intn);}publicclassAlgotithmAdapterimplementsDataOperation{//适配器类privateQuickSortquick;privateBinarySearchbinary;publicAlgotithmAdapter(QuickSortquick){this.quick=quick;}publicAlgotithmAdapter(BinarySearchbinary){this.binary=binary;}publicvoidsort(intsort[],inti,intj){quick.quickSort(sort,i,j);}publicintsearch(intsearch[],intn){returnbinary.binarySearch(search,n);}}publicclassQuickSort{//适配者类//划分数组intpartion(intarray[],intp,intr){intx=array[r];inti=p-1;//注意这点,把i设成负值,然后作为移动的标志intj;for(j=p;j<r;j++){if(array[j]<=x){i++;inttemp=array[j];array[j]=array[i];array[i]=temp;}}inttemp=array[j];array[j]=array[i+1];array[i+1]=temp;returni+1;//返回的应该是交换后的哨兵的位置}//递归解决每个划分后的⼩数组voidquickSort(int[]array,intp,intr){if(p<r){intq=partion(array,p,r);quickSort(array,p,q-1);quickSort(array,q+1,r);}}}publicclassBinarySearch{//适配者类publicintbinarySearch(int[]srcArray,intdes){intlow=0;inthigh=srcArray.length-1;while(low<=high){intmiddle=(low+high)/2;if(des==srcArray[middle]){returnmiddle;}elseif(des<srcArray[middle]){high=middle-1;}else{low=middle+1;}}return-1;}}publicclassClient{//客户端类publicstaticvoidmain(String[]args){int[]array={4,3,5,2,3,6,8,9,18,12,53,20};inti;System.out.print("排序前:");for(i=0;i<array.length;i++)System.out.print(array[i]+"");BinarySearchbinary=newBinarySearch();AlgotithmAdapteralgotithm1=newAlgotithmAdapter(binary);System.out.println("\n通过⼆分查找得到数字5:位于数组的第"+(algotithm1.search(array,5)+1)+"位");QuickSortsort=newQuickSort();AlgotithmAdapteralgotithm2=newAlgotithmAdapter(sort);algotithm2.sort(array,0,array.length-1);System.out.println("------------------------------");System.out.print("排序后:");for(i=0;i<array.length;i++)System.out.print(array[i]+"");//int[]src=newint[]{1,3,5,7,8,9};System.out.println("\n通过⼆分查找得到数字5:位于数组的第"+(algotithm1.search(array,5)+1)+"位");}}⼆、桥接模式Uml源代码AVIFile:packageBridge;publicclassAVIFileimplementsVideoFile{publicvoiddecode(StringosType,StringfileName){System.out.println("操作系统:"+osType+"⽂件名称:"+fileName);}}LinuxVersion:packageBridge;publicclassLinuxVersionextendsOperatingSystemVersion{publicvoidplay(StringfileName){StringosType="Linux播放";this.vf.decode(osType,fileName);}}MPEGFile:packageBridge;publicclassMPEGFileimplementsVideoFile{publicvoiddecode(StringosType,StringfileName){System.out.println("操作系统:"+osType+"⽂件名称:"+fileName);}}OperatingSystemVersion:packageBridge;publicabstractclassOperatingSystemVersion{protectedVideoFilevf;publicvoidsetVideo(VideoFilevf){this.vf=vf;}publicabstractvoidplay(StringfileName);}RMVBFile:packageBridge;publicclassRMVBFileimplementsVideoFile{publicvoiddecode(StringosType,StringfileName){System.out.println("操作系统:"+osType+"⽂件名称:"+fileName);}}Test:packageBridge;publicclassTest{publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubVideoFilevf;OperatingSystemVersionosType1=newWindowVersion();vf=newAVIFile();osType1.setVideo(vf);osType1.play("AVI");OperatingSystemVersionosType2=newLinuxVersion();vf=newRMVBFile();osType2.setVideo(vf);osType2.play("RMVB");OperatingSystemVersionosType3=newUnixVersion();vf=newMPEGFile();osType3.setVideo(vf);osType3.play("MPEG");}}UnixVersion:packageBridge;publicclassUnixVersionextendsOperatingSystemVersion{publicvoidplay(StringfileName){StringosType="Unix播放";this.vf.decode(osType,fileName);}}
VideoFile:packageBridge;publicinterfaceVideoFile{publicvoiddecode(StringosType,StringfileName);}WindowVersion:packageBridge;publicclassWindowVersionextendsOperatingSystemVersion{publicvoidplay(StringfileName){StringosType="Windows播放";this.vf.decode(osType,fileName);}}WMVFile:packageBridge;publicclassWMVFileimplementsVideoFile{publicvoiddecode(StringosType,StringfileName){System.out.println("操作系统:"+osType+"⽂件名称:"+fileName);}}四、外观模式Uml代码:(1)Client类:publicclassClient{publicstaticvoidmain(String[]args){try{Stringtext="czy";Stringaddress="c:设计模式";EncryptFacadeec=newEncryptFacade();ec.fileEncrypt(text,address);}catch(Exceptione)
{System.out.println(e.getMessage());}}}(2)EncryptFacade类:publicclassEncryptFacade{privateFileReaderreader;privateCipherMachinecipher;privateFileWriterwriter;publicEncryptFacade(){reader=newFileReader();cipher=newCipherMachine();writer=newFileWriter();}publicvoidfileEncrypt(StringfileNameSrc,StringfileNameDes){StringplainStr=reader.read(fileNameSrc);StringencryptStr=cipher.encrypt(plainStr);writer.write(encryptStr,fileNameDes);}}(3)FileReader类:publicclassFileReader{publicStringread(StringfileNameSrc){Stringfns=fileNameSrc;
System.out.println("原⽂件:"+fns);returnfns;}}(4)FileWriter类:publicclassFileWriter{publicvoidwrite(StringEncryText,StringFileNameDes){Stringet=EncryText;Stringfnd=FileNameDes;System.out.println("加密后⽂件:"+et);System.out.println("⽬标⽂件存放路径为:"+fnd);}}(5)CipherMachine类:publicclassCipherMachine{publicStringencrypt(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;}}五、代理模式uml图源代码:Log:packageproxy;publicinterfa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年富氧水充氧机项目合作计划书
- 2025营养师理论试题真题及答案
- 部编版一年级语文评测设计与教学计划
- 护理核心制度和岗位职责培训试题及答案
- 2025年下午初级会计《经济法》考试真题及答案
- 人教版数学三年级上册课程计划
- 人物素描教学课件
- 网络文学国际化战略布局:2025年跨文化传播路径探索报告
- 张掖养犬管理办法
- 新建风井管理办法
- 实验室5s管理制度
- 干事考试试题及答案
- 2025吕梁学院教师招聘考试试题
- 初创科技公司管理制度
- CJ/T 244-2016游泳池水质标准
- 幼儿园适用1-100的数字描红(可打印)
- 2024年江西省修水县事业单位公开招聘教师岗考试题带答案分析
- 火灾应急预案评审结论(3篇)
- 线上教育培训课程购买协议
- 三一挖机保养手册
- 烟道安装安全协议书
评论
0/150
提交评论