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

devtools/2025/1/16 18:02:49/

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

我们需要设计一个工具,它负责创建一个与数据库软件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.ppmy.cn/devtools/26475.html

相关文章

516. 最长回文子序列

516. 最长回文子序列 题目链接&#xff1a;516. 最长回文子序列 代码如下&#xff1a; class Solution { public:int longestPalindromeSubseq(string s) {//dp[i][j]:字符串s在[i,j]范围内最长的回文子序列的长度为dp[i][j]vector<vector<int>> dp(s.size(),ve…

Linux:在线扩容

目录 项目场景 所需技术 操作步骤 Ⅰ&#xff1a;查看pv&#xff08;物理卷&#xff09;、vg&#xff08;卷组&#xff09;大小是否还够扩容 Ⅱ&#xff1a;vda磁盘新增分区vda3 Ⅲ&#xff1a;pv&#xff08;逻辑卷&#xff09;扩容 Ⅳ&#xff1a;vg&#xff08;卷组&…

写一个简单的程序

思路分析&#xff1a; 1. 导入必要的库 首先&#xff0c;确保你的项目中包含了AWT或Swing库&#xff0c;因为我们将使用它们来创建图形界面。 import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import j…

爬取B站评论:Python技术实现详解

引言 在当今信息爆炸的互联网时代&#xff0c;用户生成的内容不断涌现&#xff0c;其中包括了各种各样的评论。而B站作为一个充满活力的视频分享平台&#xff0c;其评论区更是一个充满了各种各样精彩评论的宝藏地。那么&#xff0c;有没有一种简单的方法可以将这些评论收集起来…

C语言-嵌入式-STM32:FreeRTOS说明和详解

Free即免费的&#xff0c;RTOS的全称是Real time operating system&#xff0c;中文就是实时操作系统。 注意&#xff1a;RTOS不是指某一个确定的系统&#xff0c;而是指一类操作系统。比如&#xff1a;uc/OS&#xff0c;FreeRTOS&#xff0c;RTX&#xff0c;RT-Thread 等这些都…

如何利用仪表构造InfiniBand流量在数据中心测试中的应用

一、什么是Infiniband&#xff1f; 在当今数据爆炸的时代&#xff0c;数据中心作为信息处理的中心枢纽&#xff0c;面临着前所未有的挑战。传统的通信方式已经难以满足日益增长的数据传输需求&#xff0c;而InfiniBand技术的出现&#xff0c;为数据中心带来了全新的通信解决方…

java总结

最近项目遇到了很多问题&#xff0c;第一就是长连接短连接的问题 最常出现的问题就是&#xff1a;socket is close 然后就是&#xff1a;Ac 关于第一个问题&#xff1a;在我第一次这个项目的时候就疑惑了很久&#xff0c;问题主要体现在客户端和服务器两方面&#xff0c;在客…

Spring MVC入门程序

SpringMVC入门程序 一、实现思路 掌握Spring MVC入门程序&#xff0c;能够实现入门程序的编写 二、编码实现 1、新建项目 项目&#xff1a;maven&#xff0c;原型&#xff1a;maven-archetype-webapp&#xff0c;GroupID&#xff1a;com.sw 引入pom依赖 2、补充项目目录 src…