探究JDBC中的设计模式
最编程
2024-08-06 14:25:46
...
一、单例模式获取数据库连接
1、关于单例模式的定义
保证一个类仅有一个实例,并提供访问它的全局访问点。Java里面实现的单例是一个虚拟机的范围。因为装载类的功能时虚拟机,所以一个虚拟机在听过自己的Classload装载饿汉式实现单例类的时候就会创建一个类的实例。单例的实质是:控制实例的数目 。负责创建Singleton类自己唯一实例,并提供一个getInstance的方法,让外部来访问这个类的唯一实例。
2、单例模式的分类
懒汉式会一直等到马上要使用实例的时候才创建,是典型的时间换空间。饿汉式在装载类的时候就创建对象实例,典型的空间换时间。
3、单例模式实现的步骤
- 私有化构造方法
private Singleton(){}
- 定义存储实例的属性
//static 懒汉式为了在静态方法中使用 //static 饿汉式 在类装载的时候进行初始化,多个实例的static变量会共享同一块内存区域 private static Singleton singleton=null;
- 提供获取实例的静态方法
public static Singleton getInstance(){ return singleton; }
4、模板实现
懒汉式的实现:
package SingletonPattern; public class LazySingleton { //1、定义一个变量来存储类实例 private static LazySingleton uniqueInstance=null; //2、私有化构造方法,可以在内部类控制创建实例的项目 private LazySingleton(){} //3、定义一个方法为客户端提供类实例 public static synchronized LazySingleton getInstance(){ //判断存储实例的变量是否有值 //延迟加载:一开始不要加载资源和数据,一直等到马上用这个资源或者数据了,才加载 //缓存的思想:一种典型的空间换时间的方案。 if(uniqueInstance==null){ //如果没有,就创建一个实例,并把值赋值给存储类实例的变量 uniqueInstance=new LazySingleton(); } //如果有值,那就直接使用 return uniqueInstance; } }
饿汉式实现
package SingletonPattern; public class HungarySingleton { //1、定义一个变量来存储创建好的类实例,直接在这里创建实例,只能创建一次 private static HungarySingleton uniqueInstance=new HungarySingleton(); //2、私有化构造方法,可以在内部类控制创建实例的项目 private HungarySingleton(){} //3、定义一个方法为客户端提供类实例 public static HungarySingleton getInstance(){ //直接使用创建好的实例 return uniqueInstance; } }
5、JDBC连接实例挑战
package com.lyjs.jdbcTools; import java.io.InputStream; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; import javax.sql.DataSource; import org.apache.commons.dbcp.BasicDataSourceFactory; public final class JdbcUtils { //单列模式 private JdbcUtils(){} private static DataSource myDataSource=null; //声明实例 private JdbcUtils jdbcUtils =new JdbcUtils(); public JdbcUtils getJdbcUtils(){ return jdbcUtils; } static{ try { Class.forName("com.mysql.jdbc.Driver"); //加载dbcp配置文件 Properties prop=new Properties(); InputStream is=JdbcUtils.class.getClassLoader().getResourceAsStream("dbcpconfig.properties"); prop.load(is); //创建连接池 myDataSource=BasicDataSourceFactory.createDataSource(prop); } catch (Exception e) { e.printStackTrace(); throw new ExceptionInInitializerError(); } } //获取数据源 public DataSource getDataSource(){ return myDataSource; } //获取链接 public Connection getConnection(){ try { return myDataSource.getConnection(); } catch (Exception e) { e.printStackTrace(); } return null; } //关闭连接 public void free(ResultSet rs, Statement st, Connection conn) { try { if (rs != null) { rs.close(); } } catch (SQLException e) { e.printStackTrace(); } finally { try { if (st != null) { st.close(); } } catch (SQLException e) { e.printStackTrace(); } finally { try { if (conn != null) conn.close(); } catch (Exception e) { e.printStackTrace(); } } } } }
上一篇: 实战指南:重新掌握Java设计模式中的工厂方法模式
下一篇: JavaScript设计模式实战指南
推荐阅读
-
43 | 单例模式(第二部分):如何在集群环境中设计和实施分布式单例模式?
-
02_23 抽象工厂模式的设计模式
-
原型模式的设计模式(简单易懂--代码帮助理解[Java 版本)
-
程序员的设计模式 - 设计模式简介 - 什么是设计模式?
-
纳科斯架构与原理] 内核设计中的纳科斯通信通道
-
Linux Notes] 在 VMware 中为基于 NAT 模式运行的 CentOS 虚拟机设置固定网络 IP 地址为在 VMware 中以基于 NAT 的模式运行的 CentOS 虚拟机设置固定网络 IP 地址
-
设计模式__unity__unity 中的抽象工厂模式,使用单例模式加载资源
-
JS 桥接模式的设计模式:构建跨维度的路径
-
C# 中的 MVC 模式
-
Java 中的五种 I/O 模式详解--五、异步 I/O(Asynchronous I/O)