当前位置:文档之家› 面向对象系统分析和设计综合实验报告4

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

试使用策略模式设计并编程模拟实现该影院售票系统。
1)类图
2)实现代码:
public in terface Disco unt {
public double calculate( double price ); } public class MovieTicket {
private double price ;
第一个殽子骰可的星「2
第二个骰子骰出的是:5
1)类图import java.util.Date;
import java.util.Ra ndom;
public class Dice {
privatestaticDicedie1=new Dice();
privatestaticDicedie2=new Dice();
if
(instanee
==null ) {
System.
out .println(”第一次办理身份证,分配新号码”);
in sta nee
=new Ide ntityCardNo();
in sta nee
.setNo( " .println(”身份证号码为:” +instanee .getNo());
private Dice() {
}
public staticDice get In sta nce(int whichO ne ) {
if ( which One == 1) {
return die1 ;
} else {
return die2 ;
}
}
publicsynchroni zedint dice() {
}
else {
}
System.
out .println(”重复办理身份证,获取旧号码!”);
return in sta nee
publicStri ng getNo() {
return no;
}
public void setNo(String this .no = no;
2.每一麻将局都有两个骰子,因此骰子就应当是双例类。现使用多例模式模拟该场景。
户提供不同的电影票(MovieTicket)打折(Discount)方式,具体打折方案如下:
学生凭学生证可享受票价8折优惠;
年龄在10周岁及以下的儿童可享受每张票减免10元的优惠(原始票价需大于等于
20元);
影院VIP用户除享受票价半价优惠外还可进行积分,积分累计到一定额度可换取电
影院赠送的奖品。
该系统在将来可能还要根据需要引入新的打折方式。
this . discount = discount ;
}
public double getPrice() {
//调用折扣类的折扣价计算方法
Date d = new Date();
Random r = new Random( d.getTime()); int value = r .n ext In t();
value = Math. abs ( value );
value = value%6;
value += 1;
returnvalue ;
}
}
import java.util.Ra ndom;
import java.util.Date;
public class DiceClie nt {
private static Dice diel, die2;
public static void main( Stri ng[] args) {
diel = Dice.get In sta nce(1);
一、实验目的
1•熟练使用面向对象设计原则对系统进行重构;
2•熟练使用面向对象编程语言(JAVA或C++)实现几种常见的设计模式,包括单例模
式、策略模式、装饰模式和适配器模式,理解每一种设计模式的模式动机,掌握模式结构, 学习如何使用代码实现这些模式。
二、实验要求
1.选择合适的面向对象设计原则对系统进行重构,正确无误地绘制重构之后的类图;
package Refaetoringl;
public class Ide ntityCardNo { private static Ide ntityCardNo private String no;
private Ide ntityCardNo() {
}
public
static
Ide ntityCardNo getI nsta nce() {
2.结合实例,正确无误地绘制单例模式、策略模式、装饰模式和适配器模式的结构图;
3.实现单例模式、策略模式、装饰模式和适配器模式,代码运行正确无误。
三、实验内容
1.现实生活中,居民身份证号码具有唯一性,同一个人不允许有多个身份证号码,第
一次申请身份证时将号码分配给居民,如果之后因为遗失等原因补办时,还是使用原来的身
privateDiscountdiscount ; //维持一个对抽象折扣类的引用
public void setPrice( double price ) {
this . price = price ;
}
//注入一个折扣类对象
public void setDiscount(Discountdiscount ) {
口inF日nt亡:IdbritityCaindMci
dnc: String
IdantityCardNoQ
申Cjetln^tdriuuO;lcjEnt】tyCa「dNaegetNof}: String
€setNomoi ^tring): void
2)实现代码:
public class IdClie nt {
die2 = Dice.get In sta nce(2);
System.out.println(”第一骰子骰出:"+die1.dice());
System.out.println(”第二骰子骰出:"+die2.dice());
}
}
3.某软件公司为某电影院开发了一套影院售票系统,在该系统中需要为不同类型的用
份证号码,不会产生新号码,现使用单例模式模拟该场景。
办理轴证.4tE«r号码! 身滞证号为No6000654321■■办理身漁E,萩駅旧号码|JKfiE号硏■否一融?true第一次号均
■二次号匕NO6000654321卉容華否翊拝:true斤否孑相曰対It:true
1)类图
0IdentityCardNo
相关主题