J2EE设计模式-单例模式

1.懒汉模式+synchronized

package cn.bdqn.util;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

//读取配置文件工具类--单例模式(有且仅有一个实例)
public class ConfigManager {

	//读取配置文件Properties.load(inputstream)
	private static ConfigManager configManager;
	private static Properties properties;
	
	//构造方法(把配置文件load到properties)
	private ConfigManager(){
		String configFile = "database.properties";
		properties = new Properties();
		//通过classpath获取资源 ,通过当前类所在包的根目录下去查找资源文件
		InputStream is = ConfigManager.class.getClassLoader().getResourceAsStream(configFile);
		try {
			properties.load(is);
			is.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	/*
	 * 线程不安全,在并发环境下,很有可能会出现多个configManager实例
	 * 需要考虑同步,可以采用synchronized
	 * 懒汉模式
	 */
	//提供一个全局的访问点
	public static synchronized ConfigManager getInstance(){
		if(configManager == null){
			configManager = new ConfigManager();
		}
		return configManager;
	}
	public String getString(String key){
		return properties.getProperty(key);
		
	}
}

2.饿汉模式

package cn.bdqn.util;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

//读取配置文件工具类--单例模式(有且仅有一个实例)
//饿汉模式
public class ConfigManager {
	//类加载的时候,自行进行初始化操作
	private static ConfigManager configManager = new ConfigManager();
	// 饿汉模式(变种)
	/*private static ConfigManager configManager;
	static {
		configManager = new ConfigManager();
	}*/
	//读取配置文件Properties.load(inputstream)
	private static Properties properties;
	
	//构造方法(把配置文件load到properties)
	private ConfigManager(){
		String configFile = "database.properties";
		properties = new Properties();
		//通过classpath获取资源 ,通过当前类所在包的根目录下去查找资源文件
		InputStream is = ConfigManager.class.getClassLoader().getResourceAsStream(configFile);
		try {
			properties.load(is);
			is.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	//提供一个全局的访问点
	public static ConfigManager getInstance(){
		return configManager;
	}
	
	public String getString(String key){
		return properties.getProperty(key);
	}
	
}

饿汉模式的延迟加载

package cn.bdqn.util;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

//读取配置文件工具类--单例模式(有且仅有一个实例)
//饿汉模式
public class ConfigManager {
	//类加载的时候,自行进行初始化操作
	private static ConfigManager configManager;
	//读取配置文件Properties.load(inputstream)
	private static Properties properties;
	
	//构造方法(把配置文件load到properties)
	private ConfigManager(){
		String configFile = "database.properties";
		properties = new Properties();
		//通过classpath获取资源 ,通过当前类所在包的根目录下去查找资源文件
		InputStream is = ConfigManager.class.getClassLoader().getResourceAsStream(configFile);
		try {
			properties.load(is);
			is.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	//提供一个全局的访问点
	public static ConfigManager getInstance(){
		configManager = ConfigManagerHelper.INSTANCE;
		return configManager;
	}
	//主要区别在此
	public static class ConfigManagerHelper {
		private static final ConfigManager INSTANCE = new ConfigManager();
	}
	
	public String getString(String key){
		return properties.getProperty(key);
	}
	
}

猜你喜欢

转载自blog.csdn.net/qq_39905910/article/details/82751092