西南科技大学计算机学院《面向对象系统分析和设计》实验报告实验名称:实验4设计模型实验2学期:2017-2018学年第二学期一、实验目的1.熟练使用面向对象设计原则对系统进行重构;2.熟练使用面向对象编程语言(JAVA或C++)实现几种常见的设计模式,包括单例模式、策略模式、装饰模式和适配器模式,理解每一种设计模式的模式动机,掌握模式结构,学习如何使用代码实现这些模式。二、实验要求1.选择合适的面向对象设计原则对系统进行重构,正确无误地绘制重构之后的类图;2.结合实例,正确无误地绘制单例模式、策略模式、装饰模式和适配器模式的结构图;3.实现单例模式、策略模式、装饰模式和适配器模式,代码运行正确无误。三、实验内容1.现实生活中,居民身份证号码具有唯一性,同一个人不允许有多个身份证号码,第一次申请身份证时将号码分配给居民,如果之后因为遗失等原因补办时,还是使用原来的身份证号码,不会产生新号码,现使用单例模式模拟该场景。1)类图2)实现代码:publicclassIdClient{publicstaticvoidmain(String[]args){ﻩIdentityCardNo.getInstance();ﻩﻩIdentityCardNo.getInstance();}1西南科技大学计算机学院《面向对象系统分析和设计》实验报告}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.每一麻将局都有两个骰子,因此骰子就应当是双例类。现使用多例模式模拟该场景。2西南科技大学计算机学院《面向对象系统分析和设计》实验报告1)类图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{privatestaticDicedie1,die2;ﻩpublicstaticvoidmain(String[]args){ﻩﻩdie1=Dice.getInstance(1);3西南科技大学计算机学院《面向对象系统分析和设计》实验报告ﻩﻩ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;privateDisco...