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

server/2024/12/23 1:32:08/

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

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

相关文章

机器人系统结构不确定性

定义:结构不确定性指的是系统的结构特性存在的不确定性。这意味着系统的动力学特性可能受到非线性、时变、时滞、饱和等因素的影响,导致系统的结构模型具有一定的不确定性。影响:结构不确定性会使得控制器的设计更加困难,因为传统…

数据结构===栈

文章目录 栈的定义实现一个栈用数组实现栈用链表实现栈支持动态扩容的栈 栈的应用小结 栈的定义 栈是一种先进后出的数据结构。它的操作受限。 栈,是一种先进后出,或者后进先出的数据结构。跟数组和链表相比,有一定的限制性。毕竟&#xff0…

第72天:漏洞发现-Web框架中间件联动GobyAfrogXrayAwvsVulmap

案例一:某 APP-Web 扫描-常规&联动-Burp&Awvs&Xray Acunetix 一款商业的 Web 漏洞扫描程序,它可以检查 Web 应用程序中的漏洞,如 SQL 注入、跨站脚本攻击、身份验证页上的弱口令长度等。它拥有一个操作方便的图形用户界 面&#…

文献速递:深度学习医学影像心脏疾病检测与诊断---利用深度学习进行动态心脏PET的自动帧间患者运动校正

Title 题目 Automatic Inter-frame Patient Motion Correction for Dynamic Cardiac PET Using Deep Learning 利用深度学习进行动态心脏PET的自动帧间患者运动校正 01 文献速递介绍 OSITRON正电子发射断层扫描(PET)心肌灌注成像已被证明相较于其他…

avl excite python二次开发1--python解释器需用内置解释器aws_cmd

avl excite python二次开发1--python解释器需用内置解释器aws_cmd 1、python解释器问题1.1、用外置python解释器,import WSInterface会失败(WSInterface.pyd)1.2、用内置解释器aws_cmd运行py脚本1.3 用内置解释器aws_python执行脚本三级目录 1、python解释器问题 1…

Hotcoin Research | 市场洞察:2024年4月22日-28日

加密货币市场表现 本周内加密大盘整体呈现出复苏状态,在BTC减半后进入到震荡上行周期。BTC在$62000-66000徘徊,ETH在$3100-3300徘徊,随着港交所将于 4 月 30 日开始交易嘉实基金的比特币和以太坊现货 ETF,周末行情有一波小的拉升…

16 内核开发-学习流程书籍推荐

16 内核开发-学习流程书籍推荐 谈谈我最近学习tcpip 内核网络栈协议的一些方法及见解,不一对,但是我自己觉得还是有一些效果的。 针对想了解学习tcpip 内核网络栈协议的同学,推荐一种我正在使用的学习路径 (1)先通体阅读介绍内核模块的书籍 …

Python 与 TensorFlow2 生成式 AI(五)

原文:zh.annas-archive.org/md5/d06d282ea0d9c23c57f0ce31225acf76 译者:飞龙 协议:CC BY-NC-SA 4.0 第十二章:用生成式人工智能玩视频游戏:GAIL 在之前的章节中,我们已经看到如何使用生成式人工智能来生成…