jdbc设计模式之单例模式
来源:互联网 发布:云计算好处 编辑:程序博客网 时间:2024/06/06 07:00
单例模式
作为一种常见的设计模式,单例模式的设计概念是"两个私有,一个公有",即私有属性/成员变量和私有构造,以及公有方法,常用于在整个程序中仅调用一次的代码。
具体操作
描述
从单例模式的描述来看,单例模式并不能用于多次频繁调用的设计中,而更适用于程序开头,用于读取资源作启动作用的设计,在这里我们使用读取数据库的使用实例做例子。
例代码
package com.mannoroth.utils;import java.io.IOException;import java.io.InputStream;import java.util.Properties;public class ConfigManager { //创建私有属性及成员变量 private static ConfigManager configManager; private static Properties properties ; //创建私有构造 private ConfigManager(){ InputStream is = null; try { //创建·properties·做Properties对象 properties = new Properties(); is = ConfigManager.class.getClassLoader().getResourceAsStream("database.properties"); properties.load(is); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ try { if (is != null) { is.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } //公有方法,开启一个口使外部程序得以调用 public static ConfigManager getInstance(){ if (configManager == null) { configManager = new ConfigManager(); } return configManager; } //通过输入key的值,从文件中获得对应的值 public static String getValues(String key){ return properties.getProperty(key); }}
单例模式的公有方法存在两个模式,分别为:
1.懒汉模式
//在第一次调用的使用(configManager==null),使自己实例化public static synchronized ConfigManager getInstance(){ if (configManager==null) { configManager=new ConfigManager(); } return configManager; }
上述模式存在缺点,当该模式被多线程同时使用的时候,有可能会因此出现混乱,使两者交错,这时候我们可以通过使用再添加一重锁定(synchronized)的属性来保证线程安全。
解决方法:使用双重锁定
//在方法调用中再加入一重synchronized属性public static synchronized ConfigManager getInstance(){ synchronized (ConfigManager.class) { if (configManager==null) { configManager=new ConfigManager(); } } return configManager; }
2.饿汉模式
public static ConfigManager getInstance(){ if (configManager==null) { configManager=new ConfigManager(); } return configManager; }
饿汉模式在创建的同时就提供了一个静态对象供程序调用,不会再发生变化,足矣保证现成安全。
两种模式的区别:
饿汉模式:类一旦加载,就把单例初始化完成,保证getInstance的时候,单例是已经存在 懒汉模式:只有当调用getInstance的时候,才会去初始化这个单例。
阅读全文