装饰者模式&数据库连接池原理
装饰者模式: 我是一个没有感情的杀手
在复习到自建数据库连接池的时候有点蒙了,再次翻看视频整理如下:(装饰者模式下自建数据库连接池修改close功能为 回收连接对象)
自备材料:数据库连接对象的获取的工具类 jdbcUtils(产出数据库连接对象getConnection 以及 释放资源的close)
—————————————————————————————————————————————————
public class MyDataSource implements DataSource {
List <Connection> list = new ArrayList<>(); //用来存放连接对象的集合(可以看作是一个池子)
public MyDataSource() { //构造方式中创建了10个连接对象,放到池子中
for (int i = 0; i < 10; i++) {
Connection conn = JDBCUtil.getConn();
list.add(conn);
}
}
@Override
public Connection getConnection() throws SQLException {
if(list.size() == 0 ){ //获取连接对象之前自检一边池子中是否还有多余连接对象
for (int i = 0; i < 5; i++) { //如果拿那完了 我们每次设定涨幅为5个 ,再创建五个
Connection conn = JDBCUtil.getConn();
list.add(conn);
}
}
Connection conn = list.remove(0); //remove() 移除并返回该对象,我们就获得了一个连接池对象,且池子中也相应的减少
Connection connection = new ConnectionWrap(conn, list); //在把这个对象抛出去的时候, 对这个对象进行包装。(关键所在)
return connection; //返回包装后的对象
}
—————————————————————————————————————————————————
装饰者模式下的包装类
public class ConnectionWrap implements Connection{
Connection connection = null;
List <Connection> list ;
public ConnectionWrap(Connection connection , List <Connection> list) { //为全局变量赋值 ,待会儿需要
super();
this.connection = connection;
this.list = list;
}
@Override
public void close() throws SQLException { //这个是我们要使用到的方法 所以对其进行装饰修改
//connection.close(); //原本close() 是释放资源用的 现在我们不要他释放资源了 我们对其变更功能
list.add(connection); //将该连接对象,回收到我们的池中中
}
@Override
public PreparedStatement prepareStatement(String sql) throws SQLException { //这个方法待会儿我们也要使用,但我们不打算更改,所以调用之前的方法即可
return connection.prepareStatement(sql);
}
.......
———————————————————————————————————————————————————
这样一套太极打下来:
当我们从自建数据源 MyDataSource 中获取对象时, 返回给我们的对象是一个也实现Connection方法的 自建对象, 当我们要调用某个方法时,调用的是这个自建对象中方法,
如果我们不想对某个方法进行改变, 但又需要时, 使用通过构造传来的那个对象的方法即可
装饰者的大概:
实现相同的接口,被装饰类 通过装饰类的构造传入 ,作为装饰类的全局变量 想改变某个方式的逻辑时, 直接在装饰类中对应方法修改 ,如果不想改变 ,调用全局变量,启用被装饰类的方法
在使用的时候, 我们就用装饰类,做我们想做的时候, 体现了多态的思想
装饰者模式&数据库连接池原理的更多相关文章
- JDBC数据库连接池原理
JDBC是java数据库连接的简称.它是一种用于实行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用java语言编写的类和接口组成.其相关的API都在java.sql.*包下 ...
- Java数据库连接池原理与简易实现
1.什么是数据库连接池 我们现在在开发中一定都会用到数据库,为了提高我们的系统的访问速度,数据库优化是一个有效的途径.我们现在开发中使用数据库一般都要经历以下的四个步骤:(1)加载数据库的驱动类,(2 ...
- JAVA和C#中数据库连接池原理与应用
JAVA和C#中数据库连接池原理 在现在的互联网发展中,高并发成为了主流,而最关键的部分就是对数据库操作和访问,在现在的互联网发展中,ORM框架曾出不穷, 比如:.Net-Core的EFCore.Sq ...
- Java中数据库连接池原理机制的详细讲解以及项目连接数据库采用JDBC常用的几种连接方式
连接池的基本工作原理 1.基本概念及原理 由上面的分析可以看出,问题的根源就在于对数据库连接资源的低效管理.我们知道,对于共享资源,有一个很著名的设计模式:资源池(Resource Pool).该模式 ...
- Java中数据库连接池原理机制的详细讲解
连接池的基本工作原理 1.基本概念及原理 由上面的分析可以看出,问题的根源就在于对数据库连接资源的低效管理.我们知道,对于共享资源,有一个很著名的设计模式:资源池(Resource Pool).该模式 ...
- Java中数据库连接池原理机制的详细讲解(转)
连接池的基本工作原理 1.基本概念及原理 由上面的分析可以看出,问题的根源就在于对数据库连接资源的低效管理.我们知道,对于共享资源,有一个很著名的设计模式:资源池 (Resource Pool).该模 ...
- DBCP数据库连接池原理分析
在比较大的项目中,需要不断的从数据库中获取数据,Java中则使用JDBC连接数据库,但是获取数据库的连接可是相当耗时的操作,每次连接数据库都获得 .销毁数据库连接,将是很大的一个开销.为了解决这种开销 ...
- SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
作为后台服务开发,在日常工作中我们天天都在跟数据库打交道,一直在进行各种CRUD操作,都会使用到数据库连接池.按照发展历程,业界知名的数据库连接池有以下几种:c3p0.DBCP.Tomcat JDBC ...
- 数据库连接池原理 与实现(动脑学院Jack老师课后自己的练习有感)
第一步: 首先创建一个数据库连接池的接口: 数据库连接池接口有两个主要的方法,其中一个getConnection(); 通过数据库连接池返回给用户封装的数据库连接对象 createConnectio ...
随机推荐
- idea配置springBoot项目热加载
1.在application.properties中禁用模板引擎缓存 比如freemarker:spring.freemarker.cache=false 2.在pom.xml中添加依赖 <de ...
- mysql字符集调整总结
字符集是一套符号和编码的规则,不论是在oracle数据库还是在mysql数据库,都存在字符集的选择问题.对于数据库来说,字符集又是比较重要的,因为数据库存储的数据大部分都是各种文字,字符集对于数据库的 ...
- Linux下进行程序设计时,关于库的使用:
一.gcc/g++命令中关于库的参数: -shared: 该选项指定生成动态连接库: -fPIC:表示编译为位置独立(地址无关)的代码,不用此选项的话,编译后的代码是位置相关的,所以动态载入时,是通过 ...
- MZOJ 1344 工作依赖
这道题并不是很难,关键在于读入; 其余只需一个遍历;(考的时候傻逼兮兮的没写出来) 另外,学到了一个 isdigit()用来判断是否是0-9的数字; #include <bits/stdc++. ...
- shell 报错 /bin/bash^M: bad interpreter: No such file or directory
shell 执行报错: ./test.sh: /bin/bash^M: bad interpreter: No such file or directory 原因:window和linux 的文件格式 ...
- 2019.01.23 hdu1693 Eat the Trees(轮廓线dp)
传送门 题意简述:给一个有障碍的网格图,问用若干个不相交的回路覆盖所有非障碍格子的方案数. 思路:轮廓线dpdpdp的模板题. 同样是讨论插头的情况,只不过没有前一道题复杂,不懂的看代码吧. 代码: ...
- 2018.12.30 洛谷P4238 【模板】多项式求逆
传送门 多项式求逆模板题. 简单讲讲? 多项式求逆 定义: 对于一个多项式A(x)A(x)A(x),如果存在一个多项式B(x)B(x)B(x),满足B(x)B(x)B(x)的次数小于等于A(x)A(x ...
- 【1】ASP.NET异步(1)
图标说明了异步的基础认识. 1.如果没有Ajax,提交之后整个页会刷新(左图).右图所示的虚线范围区域加入了ajax技术,提交之后只更新了虚线区域的内容,这样看比较直白. <form>①& ...
- 笔记 Bioinformatics Algorithms Chapter1
Chapter1 WHERE IN THE GENOME DOES DNA REPLICATION BEGIN 一. ·聚合酶启动结构域会结合上游序列的一些位点,这些位点有多个,且特异,并且分布 ...
- codeforce868c
C. Qualification Rounds time limit per test 2 seconds memory limit per test 256 megabytes input stan ...