- 20
- 0
- 约1.4万字
- 约 18页
- 2021-11-03 发布于广东
- 举报
传播优秀Word版文档 ,希望对您有帮助,可双击去除!
传播优秀Word版文档 ,希望对您有帮助,可双击去除!
传播优秀Word版文档 ,希望对您有帮助,可双击去除!
实验名称:实验4 设计模型实验2 学期:2017-2018学年 第二学期
一、实验目的
1.熟练使用面向对象设计原则对系统进行重构;
2.熟练使用面向对象编程语言(JAVA或C++)实现几种常见的设计模式,包括单例模式、策略模式、装饰模式和适配器模式,理解每一种设计模式的模式动机,掌握模式结构,学习如何使用代码实现这些模式。
二、实验要求
1. 选择合适的面向对象设计原则对系统进行重构,正确无误地绘制重构之后的类图;
2. 结合实例,正确无误地绘制单例模式、策略模式、装饰模式和适配器模式的结构图;
3. 实现单例模式、策略模式、装饰模式和适配器模式,代码运行正确无误。
三、实验内容
1. 现实生活中,居民身份证号码具有唯一性,同一个人不允许有多个身份证号码,第一次申请身份证时将号码分配给居民,如果之后因为遗失等原因补办时,还是使用原来的身份证号码,不会产生新号码,现使用单例模式模拟该场景。
类图
实现代码:
传播优秀Word版文档 ,希望对您有帮助,可双击去除!
传播优秀Word版文档 ,希望对您有帮助,可双击去除!
传播优秀Word版文档 ,希望对您有帮助,可双击去除!
public class IdClient {
public static void main(String[] args) {
IdentityCardNo.getInstance();
IdentityCardNo.getInstance();
}
}
package Refactoring1;
public class IdentityCardNo {
private static IdentityCardNo instance;
private String no;
private IdentityCardNo() {
}
public static IdentityCardNo getInstance() {
if (instance == null) {
System.out.println(第一次办理身份证,分配新号码);
instance = new IdentityCardNo();
instance.setNo(No6000654321);
System.out.println(身份证号码为: + instance.getNo());
} else {
System.out.println(重复办理身份证,获取旧号码!);
}
return instance;
}
public String getNo() {
return no;
}
public void setNo(String no) {
this.no = no;
}
}
传播优秀Word版文档 ,希望对您有帮助,可双击去除!
传播优秀Word版文档 ,希望对您有帮助,可双击去除!
传播优秀Word版文档 ,希望对您有帮助,可双击去除!
2. 每一麻将局都有两个骰子,因此骰子就应当是双例类。现使用多例模式模拟该场景。
类图
实现代码:
import java.util.Date;
import java.util.Random;
public class Dice {
private static Dice die1 = new Dice();
private static Dice die2 = new Dice();
private Dice() {
}
public static Dice getInstance(int whichOne) {
if (whichOne == 1) {
return die1;
} else {
return die2;
}
}
public synchronized int dice() {
Date d = new Date();
Random r = new Random(d.getTime());
int value = r.nextInt();
value = Math.abs(value);
value = value % 6;
value += 1;
return value;
}
}
传播优秀Word版文档 ,希望对您有帮助,可双击去除!
传播优秀Word版文档 ,希望对您有帮助,可双击去除!
传播优秀Word版文档 ,希望对您有帮助,可双击去除!
原创力文档

文档评论(0)