首页 > 代码库 > JDBC中的那些设计模式

JDBC中的那些设计模式

一、单例模式获取数据库连接

1、关于单例模式的定义

保证一个类仅有一个实例,并提供访问它的全局访问点。Java里面实现的单例是一个虚拟机的范围。因为装载类的功能时虚拟机,所以一个虚拟机在听过自己的Classload装载饿汉式实现单例类的时候就会创建一个类的实例。单例的实质是:控制实例的数目 。负责创建Singleton类自己唯一实例,并提供一个getInstance的方法,让外部来访问这个类的唯一实例。

2、单例模式的分类

懒汉式会一直等到马上要使用实例的时候才创建,是典型的时间换空间。饿汉式在装载类的时候就创建对象实例,典型的空间换时间。

3、单例模式实现的步骤

  1. 私有化构造方法
    private Singleton(){}
  2. 定义存储实例的属性
    //static 懒汉式为了在静态方法中使用//static 饿汉式 在类装载的时候进行初始化,多个实例的static变量会共享同一块内存区域private static Singleton singleton=null;
  3. 提供获取实例的静态方法
    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();                }            }        }    }}

 

JDBC中的那些设计模式