单例模式:(1)一个类只有一个实例;
(2)它必须自行创造这个实例;
(3)它必须自行向整个系统提供这个实例。
单例之懒汉模式和饿汉模式
《懒汉模式》
package util;
/**
*
* 单例模式
* 懒汉模式读取配置文件
* 线程不安全
*/
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class ConfigManage {
private static ConfigManage configmanage;
private static Properties properties;
private ConfigManage() {// 私有构造器读取配置文件
properties = new Properties();
InputStream is = ConfigManage.class.getClassLoader()
.getResourceAsStream("database.proprties");
try {
properties.load(is);
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 全局访问点,因为构造器私有,此方法必须为静态方法,否则无法调用
public static ConfigManage getIstance() {
if (configmanage == null) {
configmanage = new ConfigManage();
}
return configmanage;
}
public String getValue(String key) {
return properties.getProperty(key);
}
}
《饿汉模式》
package util;
/**
* 饿汉模式
* 线程安全但不具有延迟加载
*/
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class ConfigManage1 {
private static ConfigManage1 configmanage = new ConfigManage1();
private static Properties properties;
private ConfigManage1() {// 私有构造器读取配置文件
properties = new Properties();
InputStream is = ConfigManage.class.getClassLoader()
.getResourceAsStream("database.proprties");
try {
properties.load(is);
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 全局访问点
public static ConfigManage1 getIstance() {
return configmanage;
}
public String getValue(String key) {
return properties.getProperty(key);
}
}
《饿汉模式改良具有延迟加载》
package util;
/**
*
* 饿汉模式具有延迟加载特性
* 线程安全且具有延迟加载特性
*/
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class ConfigManage2 {
private static ConfigManage2 configmanage;
private static Properties properties;
private ConfigManage2() {// 私有构造器读取配置文件
properties = new Properties();
InputStream is = ConfigManage.class.getClassLoader()
.getResourceAsStream("database.proprties");
try {
properties.load(is);
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static class ConfigManage2Help {
private static final ConfigManage2 INSTANCE = new ConfigManage2();
// properties= new ConfigManage2();
}
// 全局访问点
public static ConfigManage2 getIstance() {
return ConfigManage2Help.INSTANCE;
}
public String getValue(String key) {
return properties.getProperty(key);
}
}