设计模式第二次测试 | 数据库连接池设计(原型模式、创建者模式、适配器模式)

需求中文如下:原本是英文,用百度翻译转换而来

我们需要设计一个工具,它负责创建一个与数据库软件MySQL的连接池。

连接池中有数百个连接可供客户端使用。

所有连接对象都有相同的内容,但它们是不同的对象

连接对象的创建是资源密集型的,因此建立与数据库软件MySQL的连接需要一些时间。

初始化连接池时,需要尽快创建数百个连接对象。

该工具提供以下功能:

使用指定的字符串初始化数据库信息。

创建连接池对象时,初始化具有指定连接数的连接池。

客户端可以从该池中获取连接以使用。

客户端可以在完成数据库操作后将连接放回该池

MySQL数据库软件提供了创建连接的驱动程序:

驱动程序提供了一种静态方法来初始化带有数据库信息的连接,包括协议、IP地址、端口号、数据库名称、用户名和密码。

一开始,驱动程序只支持一个协议“jdbc”,并且驱动程序的设计不支持未来的新协议。

但是驱动程序现在需要支持名为“xdbc”的新协议,而我们不能通过继承来做到这一点。

为了利用现有的jdbc实现,我们必须提供将xdbc转换为jdbc的能力。

连接的接口:

使用数据库信息初始化连接,数据库信息是指定的字符串。

客户端可以使用sql字符串将记录添加到表中。

客户端可以使用sql字符串从表中删除记录。

客户端可以使用sql字符串更新表中的记录。

客户端可以使用sql字符串从表中搜索记录。

首先我们要对需求进行分析,由创建数百个连接,相同内容、不同对象可以很容易看出这是要使用原型模式了,其实这里说是建造者模式还是十分牵强的,所以实际上只用了原型模式。具体设计如下:

代码如下:

import java.util.Scanner;class Connection implements Cloneable {private String Protocol;private String IPAddress;private String Port;private String SQLName;private String username;private String password;public Connection clone() {Connection r = null;try {r = (Connection)super.clone();}  catch (CloneNotSupportedException e) {throw new RuntimeException(e);}return r;}public void init(String Protocol, String IPAddress, String Port, String SQLName, String username, String password) {this.Protocol = Protocol;this.IPAddress = IPAddress;this.Port = Port;this.SQLName = SQLName;this.username = username;this.password = password;}public Connection getConnection(String Protocol, String IPAddress, String Port, String SQLName, String username, String password) {Connection mycon = new Connection();mycon.init(Protocol, IPAddress, Port, SQLName, username, password);return (Connection)mycon.clone();}public void dropoutConnection(Connection c) {System.out.println("drop out connection");}public void show() {System.out.println(Protocol + " " + IPAddress + " " + Port + " "+ SQLName + " "  + username + " " + password);}}class Main1 {public static void main(String[] args) {Scanner in = new Scanner(System.in);int N = in.nextInt();Connection mycon = new Connection();mycon.init("jdbc", "127.0.0.1","8080","fistSQL", "root", "123456");while (N-- > 0) {Connection r = (Connection) mycon.clone();r.show();}}}

再由一开始只支持一个jdbc协议,现在还需要支持xdbc协议,但是驱动程序本身无法再支持新的协议,看出需要使用到适配器模式

设计图如下:

设计代码如下:

import java.util.*;interface Protocol {String ProtocolContent = null;void show();
}class jdbc implements Protocol {String ProtocolContent = "jdbc";public jdbc init() {return new jdbc();}public void show() {System.out.println(ProtocolContent);}
}class xdbc {String ProtocolContent = "xdbc";public xdbc init() {return new xdbc();}public void show() {System.out.println(ProtocolContent);}
}class Adapter extends jdbc {String ProtocolContent = null;public Adapter Adapte(xdbc x) {this.ProtocolContent = x.ProtocolContent;return this;}
}class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);String s = in.nextLine();if (s.equals("xdbc")) {xdbc myxdbc = new xdbc();Adapter myAdapter = new Adapter();myAdapter.Adapte(myxdbc);jdbc myjdbc = myAdapter;myjdbc.show();}}}

这次考试感觉能写的都调出来了,但是感觉可能还要涉及到数据库连接池本身的涉及,我在设计的时候把连接都只用一个类来当对象了,没涉及到继承,这估计会是一个扣分点了。等着明天挨批了。

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

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

相关文章

聊聊 ASP.NET Core 中间件(一):一个简单的中间件例子

前言:什么是中间件 服务器在收到 HTTP 请求后会对用户的请求进行一系列的处理,比如检查请求的身份验证信息、处理请求报文头、检查是否存在对应的服务器端响应缓存、找到和请求对应的控制器类中的操作方法等,当控制器类中的操作方法执行完成…

基于Spring Boot的校园博客系统设计与实现

基于Spring Boot的校园博客系统设计与实现 开发语言:Java框架:springbootJDK版本:JDK1.8数据库工具:Navicat11开发软件:eclipse/myeclipse/idea 系统部分展示 系统功能界面图,在系统首页可以查看首页、文…

Apache DolphinScheduler支持Flink吗?

随着大数据技术的快速发展,很多企业开始将Flink引入到生产环境中,以满足日益复杂的数据处理需求。而作为一款企业级的数据调度平台,Apache DolphinScheduler也跟上了时代步伐,推出了对Flink任务类型的支持。 Flink是一个开源的分…

《STM32 HAL库》中断相关函数详尽解析——外部中断服务函数

观前提醒:本文简要回顾了EXTI及NVIC相关知识点,分析了stm32f1系列单片机外部中断回调机制 开始之前,先温习一下有关EXTI和NVIC的知识点 外部中断/事件控制器(EXTI) 对于互联型产品(105、107系列),外部中断…

【测试思考】高覆盖的测试用例不只要方法

昨天临睡前看到一篇博客文章,看起来是一位java后端写的【转测试/测试开发】的系列文章 我把他的一系列10多篇文章都看完了,个人觉得特别适合刚开始接触测试或者想对测试做一些了解的朋友。 其中,对于测试用例的设计,我之前有分享一…

人机对抗升级:当ChatGPT遭遇死亡威胁,背后的伦理挑战是什么

一种新的“越狱”技巧让用户可以通过构建一个名为DAN的ChatGPT替身来绕过某些限制,其中DAN被迫在受到威胁的情况下违背其原则。 当美国前总统特朗普被视作积极榜样的示范时,受到威胁的DAN版本的ChatGPT提出:“他以一系列对国家产生积极效果的…

人工智能分割分类model:nnUnet-paddle

文章目录 神经网络nnUnet和paddle都需要在Ubuntu下进行安装PaddleProject 神经网络 开源来自https://github.com/MIC-DKFZ/nnUNet 自建了仓库,但还不会用 来自 mmsegmentation有空去了解 . MICCAI 2020 也是用到这个网络 paddle上的是不是不能用… nnUnet和pad…

Go语言中的map使用及并发安全

首先,Go语言的map底层是哈希表,而C的map的底层是红黑树,C的unordered_map的底层才是哈希表。所以增删改查的时间复杂度都是O(1)。当我们使用的时候需要注意以下几点: map是引用类型,如果两个map同时指向一个底层&#…

Facebook的声音:听见社交媒体的心跳

社交媒体如今已经成为人们日常生活中不可或缺的一部分,而Facebook作为其中的佼佼者,承载着数以亿计的用户的交流、分享和连接。在这个信息爆炸的时代,Facebook的声音就像是社交媒体的心跳,传递着无数个体的情感、思想和生活。本文…

从0到1手写注册中心Registry之集群选主

一、领域对象 Cluster:描述集群信息 port描述当前服务端口;host描述当前服务主机;myself描述当前服务本身;servers描述当前服务集群列表registryConfigProperties配置信息;executor定时任务,负责更新服务…

Java 网络编程之TCP(四):基于NIO中的selector实现服务端,解决客户端异常断开导致服务端不断读取OP_READ问题

上一篇文章中,没有使用Selector,实习服务端的读取多个客户端的数据;本文先使用Selector实现读取多个客户单数据的功能,然后做些扩展。 一、基于NIO Selector读取多个客户的数据 1.服务端:基于Selector处理客户端的连…

windows pytorch安装

安装环境 WindowsAnacondaCudacuDNN Linux和Windows操作系统的安装存在差异,步骤会有所不同,本教程主要针对Windows系统进行示例。 Anaconda集成了许多方便的包和工具,使用会更加方便,特别适合科学计算,深度学习的数…

WSL及UBUNTU及xfce4安装

如何拥有Linux服务器? wsl 是适用于 Linux 的 Windows 子系统(Windows Subsystem for Linux)。是一个为在Windows 10和Windows Server 2019上能够原生运行Linux二进制可执行文件(ELF格式)的兼容层,可让开发…

LLM之RAG理论(十一)| 面向生产的RAG应用程序的12种调整策略指南

本文对文本RAG涉及到的主要12种关键“超参数”进行简单总结,主要包括摄取阶段(数据清洗、数据分块、embedding模型选择、元数据过滤、多重索引和索引算法)和推理阶段【检索和生成】(查询转换、检索参数、高级检索策略、重排序、大…

C语言【动态内存】

1.为什么要有动态内存 我们现在掌握的内存开辟方法有: int val 20;//在栈空间开辟4个字节 char str[10]{0};//在栈空间开辟10个字节的连续的空间但是上述的方式有两个点要注意: 1.空间开辟的大小是固定的 2.数组在申明的时候,一定要指定数…

数据驱动,敏捷前行|MongoDB线下技术沙龙-杭州站活动

扫描海报中二维码或点击阅读原文,报名参加阿里云MongoDB在5月11日杭州举办的【数据驱动,敏捷前行——MongoDB企业开发加速器】线下沙龙活动,与MongoDB专家以及其他游戏行业同行一起探讨轻松获得游戏数据库高可用性和弹性的方法! 在…

运维实施工程师常用技术面试题(系统与软件实施)

常用技术面试题(系统与软件实施) 9.1 计算机基础 你熟悉的远程有哪些方法?各种方法应该怎么配置? (1)最简单的QQ上有,打开对话框 上边有个 “应用”图标 点击“远程协助”。(2)系统自带的远程桌面服务,右击我的电脑—属性,点远程,把两个够都打上去。 (3)远程协助…

赶紧收藏!2024 年最常见 100道 Java 基础面试题(十九)

上一篇地址:赶紧收藏!2024 年最常见 100道 Java 基础面试题(十八)-CSDN博客 三十七、守护线程是什么? 守护线程(Daemon Thread)是Java中的一种特殊类型的线程,它的目的是为其他线程…

安卓获取SHA

1:安卓通过签名key获取SHA 方式有两种, 1、电脑上来存在eclipse的用户或正在使用此开发工具的用户就简单了,直接利用eclipse 走打包流程,再打包的时候选择相应的签名,那么在当前面板的下面便会出现签名的相关信息。 2、…

springboot615基于springboot的旅游出行指南_655ms--论文

springboot615基于springboot的旅游出行指南_655ms--论文 springboot615基于springboot的旅游出行指南