版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2014年设计模式考试题设计一个程序来读取多种不同存储格式的图片,针对每一种图片格式都设计一个图片读取器(ImageReader),如GIF格式图片读取器(GifReader)用于读取GIF格式的图片,JPEG格式图片读取器(JpegReader)用于读取JPEG格式的图片,Tiff格式图片读取器(TiffReader)用于读取Tiff格式的图片。图片读取器对象通过图片读取器工厂(ImageReaderFactory)来创建,ImageReaderFactory是「-个抽象类,用于定义创建图片读取器的工厂方法,其子类GifReaderFactory、JpegReaderFactory和TiffReaderFactory用于创建具体的图片读取器对象。请使用工厂方法模式实现该程序的设计,并使用UML画出该模式的类图。ImageReadFactoryFactory:void+read()+finish():void:void+read()+finish()JpegReadFactoryGifReadFactoryTiffReadFactory+read()+finish():void:void+read()+finish()packagecom;publicinterfaceImageReaderFactory(//读取publicvoidread();//完成publicvoidfinish();}publicclassJpegReaderFactoryimplementsImageReaderFactory{publicvoidread(){ImageReadFactoryFactory:void+read()+finish():void:void+read()+finish()JpegReadFactoryGifReadFactoryTiffReadFactory+read()+finish():void:void+read()+finish()}publicvoidfinish()(System.out.println("JPEG图片读取完成");}}publicclassGifReaderFactoryimplementsImageReaderFactory{publicvoidread(){System.out.println("读取GIF图片中");}publicvoidfinish(){System.out.println("GIF图片读取完成");}}publicclassTiffReaderFactoryimplementsImageReaderFactory{publicvoidread(){System.out.println("读取TIFF图片中");}publicvoidfinish(){System.out.println("TIFF图片读取完成");}}classFactory{publicstaticImageReaderFactorygetImageReaderInstance(Stringtype){ImageReaderFactoryf=null;if("Jpeg".equals(type)){f=newJpegReaderFactory();}if("Tiff".equals(type)){f=newTiffReaderFactory();}if("Gif".equals(type)){f=newGifReaderFactory();if("jpeg".equals(type))(f=newJpegReaderFactory();}if("tiff".equals(type))(f=newTiffReaderFactory();}if("gif".equals(type))(f=newGifReaderFactory();}returnf;}};publicclassImageReaderClient(publicstaticvoidmain(String[]args)(if(args.length==0)(System.out.println("请输入需要读取的图片类型");/*System.exit(1);*/}ImageReaderFactoryf=Factory.getImageReaderInstance(args[0]);/*ImageReaderFactoryf=Factory.getImageReaderInstance("gif");*/if(f!=null)(f.read();f.finish();}else(System.out.println("不支持该类型图片。");实现一个双向适配器实例,使得猫(Cat)可以学狗(Dog)叫,狗可以学猫抓老鼠。请使用UML画出相应类图并给出编程设计代码。packagecom;publicinterfaceIcat(//猫的外表publicvoidcatLooks();//猫捉老鼠publicvoidzhuoshu();}publicinterfaceIdog(〃狗的外表publicvoiddogLooks();//狗叫publicvoidbark();}publicclassArealCatimplementsIcat(publicvoidcatLooks()(System.out.println("Iamarealcat,IhaveacatLooks.");};//狗叫publicvoidzhuoshu()(System.out.println("Iamarealcat,Icancatchamouse.");};}publicclassArealDogimplementsIdog(//狗的外表publicvoiddogLooks(){System.out.println("Iamarealdog,IhaveadogLooks.");};//狗叫publicvoidbark(){System.out.println("Iamarealdog,Icanbark.");};}publicclassATwoFaceadapterimplementsIdog,Icat{Icatcat=null;publicATwoFaceadapter(Icatcat){this.cat=cat;}publicvoiddogLooks(){//假装自己是一条狗Systemout.println("Iamadog,too!");//隐藏自己的外貌//cat.catLooks();}publicvoidbark(){cat.zhuoshu();}Idogdog=null;publicATwoFaceadapter(Idogdog){this.dog=dog;}publicvoidcatLooks(){//假装自己是一只猫Systemout.println("Iamacat,too.");//隐藏自己的外貌//dog.dogLooks();}publicvoidzhuoshu()(dog.bark();}}publicclassMain(publicstaticvoidmain(String[]args)(//把一条狗适配成一只猫IcatAFakeCat=newATwoFaceadapter(newArealDog());AFakeCat.catLooks();AFakeCat.zhuoshu();//把一只猫适配成一条狗IdogAFakeDog=newATwoFaceadapter(newArealCat());AFakeDog.dogLooks();AFakeDog.bark();}某银行软件的利息计算流程如下:系统根据账户查询用户信息;根据用户信息判断用户类型;不同类型的用户使用不同的利息计算方式计算利息(如活期账户CurrentAccount和定期账户SavingAccount具有不同的利息计算方式);显示利息。请使用模板方法模式来设计该系统,绘制UML类图并给出编程设计代码。AbstractClass{abstract}TOC\o"1-5"\h\z+findUserType():vod+findInterest():vod+findTotal():vod+userAccount():vodfindUserType();l2ATVfindInterest();TfindTotal();CurrentAccountSavingAccount+findUserType():vod+findUserType():vod+findInterest():vod+findInterest():vod+findTotal():vod+findTotal():vodpackagecom;publicabstractclassAbstractclass(//定义一个模板方法来控制用户帐户查询的流程publicvoiduserAccount(){//TemplateMethod//首先生产手机体(模板方法自己完成)Systemout.println("查询用户帐户信息");this.findUserType();this.findInterest();this.findTotal();Systemout.println("查询完毕!");//以上模板已经规定好了}〃定义抽象的方法(不同类型的帐户)protectedabstractvoidfindUserType();〃定义抽象的方法(不同利率)protectedabstractvoidfindInterest();〃定义抽象的方法(不同利息)protectedabstractvoidfindTotal();}publicclassCurrentAccountextendsAbstractclass(protectedvoidfindUserType()(Systemout.println("该用户为活期存款帐户");}protectedvoidfindInterest()(Systemout.println("活期存款利率为0.35%");}protectedvoidfindTotal()(Systemout.println("该用户存入1000元,年利息为3.5元");}}publicclassSavingAccountextendsAbstractClass(protectedvoidfindUserType()(Systemout.println("该用户为定期存款帐户");}protectedvoidfindInterest()(Systemout.println("定期存款利率为3.25%");}protectedvoidfindTotal()(Systemout.println("该用户存入1000元,年利息为32.5元");}}publicclassMain(publicstaticvoidmain(Stringargs[])(AbstractClassac01=newCurrentAccount();//子类的对象付给父类ac01.userAccount()//查询帐户AbstractClassac02=newSavingAccount();//子类的对象付给父类ac02.userAccount()//查询帐户请查阅文献,并结合个人的学习和实践体会,举例谈谈你对设计模式的认识,以及某个特定的设计模式(自选)在面向对象程序设计中的重要作用。软件开发过程中,一个系统的关键是设计,如果系统设计的很好,那么在后续开发中就能少走弯路,并且在系统维护中,能够简单、轻松。但如果系统设计中就出现了问题,那么这个系统的开发必然是痛苦的。所以人们把软件开发过程中有价值的经验进行提炼和总结,得到了很多的模式。这些模式很清晰的说明了它们所表达的关联、问题和解决方式之间的关系。这些在软件设计上积累、抽象出来的模式被称之为设计模式。模式是一条规则,告诉你应该如何创建一个实物、应该在何时创建。它既是过程,也是实物;既是对当前实物的描述,也是对创建实物的过程的描述。本学期共学习了二十三个模式,这些模式可以分成三类,创建型模式、结构性模式和行为模式。各类模式都是在不同场景下,解决不同问题的方案。下面具体谈谈行为模式:行为模式涉及到算法和对象间职责的分配。行为模式不仅描述对象或类的模式,还描述它们之间的通信模式。这些模式刻画了在运行时难以跟踪的复杂的控制流。它们将你的注意力从控制流转移到对象间的联系方式上来。行为类模式使用继承机制在类间分派行为。行为对象模式使用对象复合而不是继承。一些行为对象模式描述了一组对等的对象怎样相互协作以完成其中任一个对象都无法单独完成的任务。状态模式(StatePattern)属于行为模式的一种。状态模式的定义:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。状态模式适用于下面的场景一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。一个操作中含有庞大的多分支结构,并且这些分支决定于对象的状态。状态模式将与特定状态相关的行为局部化,并且将不同的状态行为分割开来,也就是将特定状态的相关行为都放在一个对象中,由于所有与状态相关的代码都存在
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年大学分子生物学(基因表达调控)试题及答案
- 2025年大学本科(工商管理)企业管理案例分析阶段测试题及答案
- 2025年高职城市轨道交通通信信号技术(城市轨道交通信号系统)试题及答案
- 2025年高职化工仪表技术(化工仪表校准)试题及答案
- 2025年中职人工智能技术应用(AI技术基础原理)试题及答案
- 2025年大学大四(林产化工)林产精细化学品工艺学阶段测试试题及答案
- 2025年高职(工商企业管理)企业管理试题及答案
- 2025年大学舞蹈学(舞蹈教育心理学)试题及答案
- 2025年高职(助产)妇科护理综合测试题及答案
- 2025年高职(建设工程监理)建设工程合同管理试题及答案
- 汉字鱼的讲解课件
- 内蒙古电力招聘考试真题2024
- 知道智慧树知识产权信息检索与利用满分测试答案
- 火电厂消防知识培训课件
- 医院三合理一规范培训
- 解读《重症监护病房临终关怀与姑息治疗指南》
- 关键物料管理办法
- 禁毒讲师团管理办法
- 《室内空气 第9部分:建材产品和装饰材料中挥发性有机化合物释放量的测试 环境测试舱法》标准化发展报告
- 《2025-2026中国房地产市场报告》
- 校园安全教育论文3000字
评论
0/150
提交评论