面向对象系统分析和设计综合实验报告4

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

西南科技大学计算机学院《面向对象系统分析和设计》实验报告1实验名称:实验4设计模型实验2学期:2017-2018学年第二学期一、实验目的1.熟练使用面向对象设计原则对系统进行重构;2.熟练使用面向对象编程语言(JAVA或C++)实现几种常见的设计模式,包括单例模式、策略模式、装饰模式和适配器模式,理解每一种设计模式的模式动机,掌握模式结构,学习如何使用代码实现这些模式。二、实验要求1.选择合适的面向对象设计原则对系统进行重构,正确无误地绘制重构之后的类图;2.结合实例,正确无误地绘制单例模式、策略模式、装饰模式和适配器模式的结构图;3.实现单例模式、策略模式、装饰模式和适配器模式,代码运行正确无误。三、实验内容1.现实生活中,居民身份证号码具有唯一性,同一个人不允许有多个身份证号码,第一次申请身份证时将号码分配给居民,如果之后因为遗失等原因补办时,还是使用原来的身份证号码,不会产生新号码,现使用单例模式模拟该场景。1)类图2)实现代码:publicclassIdClient{西南科技大学计算机学院《面向对象系统分析和设计》实验报告2publicstaticvoidmain(String[]args){IdentityCardNo.getInstance();IdentityCardNo.getInstance();}}packageRefactoring1;publicclassIdentityCardNo{privatestaticIdentityCardNoinstance;privateStringno;privateIdentityCardNo(){}publicstaticIdentityCardNogetInstance(){if(instance==null){System.out.println(第一次办理身份证,分配新号码);instance=newIdentityCardNo();instance.setNo(No6000654321);System.out.println(身份证号码为:+instance.getNo());}else{System.out.println(重复办理身份证,获取旧号码!);}returninstance;}publicStringgetNo(){returnno;}publicvoidsetNo(Stringno){this.no=no;}}2.每一麻将局都有两个骰子,因此骰子就应当是双例类。现使用多例模式模拟该场景。西南科技大学计算机学院《面向对象系统分析和设计》实验报告31)类图2)实现代码:importjava.util.Date;importjava.util.Random;publicclassDice{privatestaticDicedie1=newDice();privatestaticDicedie2=newDice();privateDice(){}publicstaticDicegetInstance(intwhichOne){if(whichOne==1){returndie1;}else{returndie2;}}publicsynchronizedintdice(){Dated=newDate();Randomr=newRandom(d.getTime());intvalue=r.nextInt();value=Math.abs(value);value=value%6;value+=1;returnvalue;}}importjava.util.Random;importjava.util.Date;publicclassDiceClient{西南科技大学计算机学院《面向对象系统分析和设计》实验报告4privatestaticDicedie1,die2;publicstaticvoidmain(String[]args){die1=Dice.getInstance(1);die2=Dice.getInstance(2);System.out.println(第一骰子骰出:+die1.dice());System.out.println(第二骰子骰出:+die2.dice());}}3.某软件公司为某电影院开发了一套影院售票系统,在该系统中需要为不同类型的用户提供不同的电影票(MovieTicket)打折(Discount)方式,具体打折方案如下:学生凭学生证可享受票价8折优惠;年龄在10周岁及以下的儿童可享受每张票减免10元的优惠(原始票价需大于等于20元);影院VIP用户除享受票价半价优惠外还可进行积分,积分累计到一定额度可换取电影院赠送的奖品。该系统在将来可能还要根据需要引入新的打折方式。试使用策略模式设计并编程模拟实现该影院售票系统。1)类图2)实现代码:publicinterfaceDiscount{publicdoublecalculate(doubleprice);}publicclassMovieTicket{privatedoubleprice;privateDiscountdiscount;//维持一个对抽象折扣类的引用publicvoidsetPrice(doubleprice){this.price=price;}西南科技大学计算机学院《面向对象系统分析和设计》实验报告5//注入一个折扣类对象publicvoidsetDiscount(Discountdiscount){this.discount=discount;}publicdoublegetPrice(){//调用折扣类的折扣价计算方法returndiscount.calculate(this.price);}}//VIP会员票折扣类:具体策略类publicclassVIPDiscountimplementsDiscount{publicdoublecalculate(doubleprice){System.out.println(VIP票:);System.out.println(增加积分!);returnprice*0.5;}}//学生票折扣类:具体策略类publicclassStudentDiscountimplementsDiscount{publicdoublecalculate(doubleprice){System.out.println(学生票:);returnprice*0.8;}}//儿童票折扣类:具体策略类publicclassChildrenDiscountimplementsDiscount{publicdoublecalculate(doubleprice){System.out.println(儿童票:);returnprice-10;}}publicclassMoviceClient{publicstaticvoidmain(Stringargs[]){MovieTicketmt=newMovieTicket();doubleoriginalPrice=60.0;doublecurrentPrice;mt.setPrice(originalPrice);System.out.println(原始价为:+originalPrice);System.out.println(---------------------------------);西南科技大学计算机学院《面向对象系统分析和设计》实验报告6Discountdiscount=newVIPDiscount();//vip用户mt.setDiscount(discount);//注入折扣对象currentPrice=mt.getPrice();System.out.println(折后价为:+currentPrice);discount=newStudentDiscount();//学生用户mt.setDiscount(discount);//注入折扣对象currentPrice=mt.getPrice();System.out.println(折后价为:+currentPrice);discount=newChildrenDiscount();//儿童用户mt.setDiscount(discount);//注入折扣对象currentPrice=mt.getPrice();System.out.println(折后价为:+currentPrice);}}3)实现结果:4.某软件公司欲开发一款飞机模拟系统,该系统主要模拟不同种类飞机的飞行特征与起飞特征,需要模拟的飞机种类及其特征如表1所示:表1飞机种类及特征一览表飞机种类起飞特征飞行特征直升机(Helicopter)垂直起飞(VerticalTakeOff)亚音速飞行(SubSonicFly)客机(AirPlane)长距离起飞(LongDistanceTakeOff)亚音速飞行(SubSonicFly)歼击机(Fighter)长距离起飞(LongDistanceTakeOff)超音速飞行(SuperSonicFly)鹞式战斗机(Harrier)垂直起飞(VerticalTakeOff)超音速飞行(SuperSonicFly)为将来能够模拟更多种类的飞机,试采用策略模式设计并模拟实现该飞机模拟系统。1)类图西南科技大学计算机学院《面向对象系统分析和设计》实验报告72)实现代码:publicclassplane{privatestatestate;//状态publicvoidsettakeoffFeatures(statetFeatures){this.state=tFeatures;}publicvoidsetplanetype(Stringtype){if(type==直升机)state=newHelicopter();elseif(type==客机){state=newAirPlane();}elseif(type==歼击机){state=newFighter();}elseif(type==鹞式战斗机){state=newHarrier();}else{state=null;}}publicvoidtakeoff(){state.takeOff();}publicvoidfly(){state.fly();}}西南科技大学计算机学院《面向对象系统分析和设计》实验报告8publicclassAirPlaneimplementsstate{@OverridepublicStringtakeOff(){System.out.println(长距离起飞);return长距离起飞;}@OverridepublicStringfly(){System.out.println(亚音速飞行);return亚音速飞行;}}publicclassFighterimplementsstate{@OverridepublicStringtakeOff(){System.out.println(长距离起飞);return长距离起飞;}@OverridepublicStringfly(){System.out.println(超亚音速飞行);return超音速飞行;}}publicclassHarrierimplementsstate{@OverridepublicStringtakeOff(){System.out.println(垂直起飞);return垂直起飞;}@OverridepublicStringfly(){System.out.println(超亚音速飞行);return超音速飞行;}}publicclassHelicopterimplementsstate{@OverridepublicStringtakeOff(){System.out.println(垂直起飞);return垂直起飞;}西南科技大学计算机学院《面向对象系统分析和设计》实验报告9@OverridepublicStringfly(){System.o

1 / 18
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功