实验内容:
1. 某Web 性能测试软件中包含一个虚拟用户生成器(Virtual User Generator)。
为了避免出现生成的虚拟用户数量不一致,该测试软件在工作时只允许启动唯一
一个虚拟用户生成器。采用单例模式设计该虚拟用户生成器,绘制类图并使用饿
汉式单例、双重检测锁和IoDH 三种方式编程模拟实现。
答(类图):
饿汉式单例代码:
import java.util.List;
public class VUGenerator {
private static final VUGenerator instance = new VUGenerator();
private VUGenerator() { }
public static VUGenerator getInstance() {
return instance;
}
public List generateVirtualUsers() {
return null;
}
}
public class Client {
public static void main(String[] args) {
VUGenerator gen1, gen2;
gen1 = VUGenerator.getInstance();
gen2 = VUGenerator.getInstance();
System.out.println(gen1==gen2);
}
}
双重检测锁代码:
import java.util.List;
public class VUGenerator {
private volatile static VUGenerator instance = null;
private VUGenerator() { }
public static VUGenerator getInstance() {
if (instance == null) {
synchronized (VUGenerator.class) {
if (instance == null) {
instance = new VUGenerator();
}
}
}
return instance;
}
public List generateVirtualUsers() {
return null;
}
}
public class Client {
public static void main(String[] args) {
VUGenerator gen1, gen2;
gen1 = VUGenerator.getInstance();
gen2 = VUGenerator.getInstance();
System.out.println(gen1==gen2);
}
}
IoDH 代码:
import java.util.List;
public class VUGenerator {
private VUGenerator() { }
private static class HolderClass {
private final static VUGenerator instance = new VUGenerator();
}
public static VUGenerator getInstance() {
return HolderClass.instance;
}
public List generateVirtualUsers() {
return null;
}
}
public class Client {
public static void main(String[] args) {
VUGenerator gen1, gen2;
gen1 = VUGenerator.getInstance();
gen2 = VUGenerator.getInstance();
System.out.println(gen1==gen2);
}
}
2. 某OA 系统需要提供一个加密模块,将用户机密信息(例如口令、邮箱等)
加密之后再存储在数据库中,系统已经定义好了数据库操作类。为了提高开发效
率,现需要重用已有的加密算法,这些算法封装在一些由第三方提供的类中,有
些甚至没有源代码。试使用适配器模式设计该加密模块,实现在不修改现有类的
基础上重用第三方加密方法。要求绘制相应的类图并编程模拟实现,需提供对象
适配器和类适配器两套实现方案。
类图(对象适配器)如下所示:
其中,DataOperator充当目标抽象类角色,CipherAdapter和NewCipherAdapter
充当适配器角色,Caesar 和NewCipher 充当适配者角色。
类适配器设计方案需将上图中的DataOperator 改为接口,且适配器与适配
者之间的关联关系需改为继承关系。
3. 某手机美图APP 软件支持多种不同的图像格式,例如JPG、GIF、BMP
等常用图像格式,同时提供了多种不同的滤镜对图像进行处理,例如木刻滤镜
(Cutout)、模糊滤镜(Blur)、锐化滤镜(Sharpen)、纹理滤镜(Texture)等。现采用桥
接模式设计该APP 软件,使得该软件能够为多种图像格式提供一系列图像处理
滤镜,同时还能够很方便地增加新的图像格式和滤镜,绘制对应的类图并编程模
拟实现。
4. 某移动社交软件欲增加一个群组(Group)功能。通过设置,用户可以将自
己的动态信息,包括最新动态、新上传的视频以及分享的链接等,分享给某个特
定的成员(Member),也可以分享给某个群组中的所有成员;用户可以将成员添加
至某个指定的群组;此外,还允许用户在一个群组中添加子群组,以便更加灵活
地实现面向特定人群的信息共享。
现采用组合模式设计该群组功能,绘制对应的类图并编程模拟实现。
类图【安全组合模式或透明组合模式均可】: