实验3 设计模式实验2

news2024/11/17 21:38:18

实验内容:
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),也可以分享给某个群组中的所有成员;用户可以将成员添加
至某个指定的群组;此外,还允许用户在一个群组中添加子群组,以便更加灵活
地实现面向特定人群的信息共享。
现采用组合模式设计该群组功能,绘制对应的类图并编程模拟实现。
类图【安全组合模式或透明组合模式均可】:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/390376.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

汇编语言程序设计(四)之汇编指令

系列文章 汇编语言程序设计(一) 汇编语言程序设计(二)之寄存器 汇编语言程序设计(三)之汇编程序 汇编指令 1. 数据传输指令 指令包括:MOV、XCHG、XLAT、LEA、LDS、LES、PUSH、POP、PUSHF、LA…

关闭应用程序遥测,禁止Windows收集用户信息

目录 1. 先创建还原点,防止意外 2. 界面设置 3. 服务 (1) GPEdit.msc - 本地计算机策略 - 计算机配置 - 管理模板 - Windows 组件 - 应用程序兼容性 - 关闭应用程序遥测 - 已启用 (2) GPEdit.msc - 本地计算机策略 - 计算机配置 - 管理模板 - Windows 组件 - 数…

aws apigateway 使用restapi集成lambda

参考资料 代理集成,https://docs.aws.amazon.com/zh_cn/apigateway/latest/developerguide/api-gateway-create-api-as-simple-proxy-for-lambda.html非代理集成,https://docs.aws.amazon.com/zh_cn/apigateway/latest/developerguide/getting-started-…

Android 面试必备:高工必问Binder机制~

面试可能会问到的问题 从IPC的方式问到Binder的优势为什么zygote跟其他服务进程的通讯不使用BinderBinder线程池和Binder机制 等等这些问题都是基于你对Binder的理解还有对其他IPC通讯的理解 IPC方式有多少种 传统的IPC方式有Socket、共享内存、管道、信号量等安卓特有的是Bi…

Spring AOP —— 详解、实现原理、简单demo

目录 一、Spring AOP 是什么? 二、学习AOP 有什么作用? 三、AOP 的组成 3.1、切面(Aspect) 3.2、切点(Pointcut) 3.3、通知(Advice) 3.4、连接点 四、实现 Spring AOP 一个简…

linux系统安装学习

文章目录一、系统安装二、命令格式和帮助三、文件目录操作命令创建目录四、cat查看文件内容、合并文件sudo获得root权限总结一、系统安装 二、命令格式和帮助 三、文件目录操作命令 ls查看目录文件 -a 显示隐藏的文件 -l 以列表的形式显示 -h 以人性化的方式显示文件内容大小 …

【java】Java 集合框架

文章目录集合框架体系如图所示集合接口集合实现类(集合类)集合算法如何使用迭代器遍历 ArrayList遍历 Map如何使用比较器总结早在 Java 2 中之前,Java 就提供了特设类。比如:Dictionary, Vector, Stack, 和 Properties 这些类用来…

【Maven】P4 生命周期与插件

Maven 生命周期与插件项目构建生命周期clean 生命周期default 构建生命周期site 构建生命周期插件项目构建生命周期 Maven 生命周期描述的是一次构建过程经历了多少个事件。 Maven 对构建生命周期划分为3套: clean:清理工作;default&#…

1.4 条件概率与乘法公式

1.4.1 条件概率在实际问题中,除了直接考虑某事件 B 发生的概率P(B)外,有时还会碰到这样的问题,就是“在事件A 已经发生的条件下,事件B 发生的概率”。一般情况下,后概率与前一概率不同,为了区别,我们常把后者称为条件概率,记为P(B…

一文带你入门angular(中)

一、angular中的dom操作原生和ViewChild两种方式以及css3动画 1.原生操作 import { Component } from angular/core;Component({selector: app-footer,templateUrl: ./footer.component.html,styleUrls: [./footer.component.scss] }) export class FooterComponent {flag: b…

tftp、nfs 服务器环境搭建

目录 一、认识 tftp、nfs 1、什么是 tftp? 2、什么是 nfs? 3、tftp 和 nfs 的区别 二、tftp的安装 1、安装 tftp 服务端 2、配置 tftp 3、启动 tftp 服务 三、nfs 的安装 1、安装 nfs 服务端 2、配置 nfs 3、启动 nfs 服务 一、认识 tftp、…

3D目标检测(毕业设计+代码)

概述 3d Objectron是一种适用于日常物品的移动实时3D物体检测解决方案。它可以检测2D图像中的物体,并通过在Objectron数据集上训练的机器学习(ML)模型估计它们的姿态. 下图为模型训练后推理的结果! ​ 算法 我们建立了两个机器…

web项目的初始化

Tomcat 安装配置 Tomcat 官方站点:Apache Tomcat - Welcome! 。 安装 得到下载的安装包(一般是 zip 文件),并解压到你指定的目录(建议不要解压在 c 盘);(这里以 windows10 系统为例…

网上电子商城的设计与实现

技术:Java、JSP等摘要:21 世纪以来,人类经济高速发展,人们的生活发生了日新月异的变化,特别是计算机的应用及普及到经济和社会生活的各个领域。在消费领域,网上购物已经成为大众所接受的一种新型的消费方式…

javaEE初阶 — 如何用 HTML 编写一个简易代码

文章目录html1. 建立一个文本文档的方式编写2. 标签的方式编写3. 补充:更改后缀的方式4. 如何使用 VS Code 来编写一个 html 代码4.1 VS Code 的下载4.2 VS Code 的使用html html 用来描述网页的骨架,这是一个非常有特点的 标签化 的语言。 下面来写一个…

分布式对象存储——Apache Hadoop Ozone

前言 本文隶属于专栏《大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见大数据技术体系 1. 概述 Ozone是Apache Hadoop项目的子项目&#xf…

MySQL下载安装以及环境配置教程

目录MySQL 下载MySQL 安装配置环境变量MySQL 下载 进入官方网站 https://www.mysql.com/ 点击 DOWNLOADS 进入下载页面 免费版本点击下方的 MySQL Community (GPL) Downloads 点击 MySQL Community Server 点击 Go to Download Page 进入下载页面 点击 Download 点击 No thank…

【逐步剖C】-第九章-字符串函数和内存函数

前言:第一部分先简单介绍一下常用字符串函数和内存函数,第二部分再重点介绍重要函数的的模拟实现。若日后再发现某些好用或者有意思的库函数,都会在本文中进行更新。 一、常用库函数介绍 1. strlen (1)函数声明&…

C语言-基础了解-11-C作用域规则

C作用域规则 一、C作用域规则 任何一种编程中,作用域是程序中定义的变量所存在的区域,超过该区域变量就不能被访问。C 语言中有三个地方可以声明变量: 1、在函数或块内部的局部变量 2、在所有函数外部的全局变量 3、在形式参数的函数参数定…

Oracle Primavera P6 学习地图(Updating)

目录P6介绍及使用P6异常处理P6部署配置维护P6集成及开发P6集成及开发为了方便大家更好的针对查询我博客中的内容,特针对P6不同方面进行简要分类,如在使用P6过程中有碰到任何问题,欢迎通过如下方式与我取得联系(查询联系方式) P6介绍及使用 P…