单例模式
1. 懒汉模式(当调用实例时,完成初始化)
package cn.smbms.tools;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class ConfigManager {
private static Properties properties;
private static ConfigManager configManager;
private ConfigManager(){
this.properties = new Properties();
String configFile = new String("database.properties");
InputStream is = ConfigManager.class.getClassLoader().getResourceAsStream(configFile);
try {
properties.load(is);
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static ConfigManager getInstance(){
if(configManager==null){
configManager = new ConfigManager();
}
return configManager;
}
}
package cn.smbms.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import cn.smbms.tools.ConfigManager;
public class BaseDao {
public static Connection getConnection(){
Connection connection = null;
String driver = ConfigManager.getInstance().getValue("driver");
String url = ConfigManager.getInstance().getValue("url");
String user = ConfigManager.getInstance().getValue("user");
String password = ConfigManager.getInstance().getValue("password");
try {
Class.forName(driver);
connection = DriverManager.getConnection(url, user, password);
} catch (Exception e) {
e.printStackTrace();
}
return connection;
}
2. 恶汉模式(在类加载的时候,完成初始化)
package cn.smbms.tools;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class ConfigManager {
private static Properties properties;
private static ConfigManager configManager = new ConfigManager();
private ConfigManager(){
this.properties = new Properties();
String configFile = new String("database.properties");
InputStream is = ConfigManager.class.getClassLoader().getResourceAsStream(configFile);
try {
properties.load(is);
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static ConfigManager getInstance(){
return configManager;
}
}
3. 静态内部类
查阅资料:加载一个类时,其内部类不会同时被加载。一个类被加载,当且仅当其某个静态成员(静态域、构造器、静态方法等)被调用时发生。
package cn.smbms.tools;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class ConfigManager {
private static Properties properties;
private static ConfigManager configManager;
private ConfigManager(){
this.properties = new Properties();
String configFile = new String("database.properties");
InputStream is = ConfigManager.class.getClassLoader().getResourceAsStream(configFile);
try {
properties.load(is);
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static class ConfigManagerHelper{
private static final ConfigManager INSTANCE = new ConfigManager();
}
public static ConfigManager getInstance(){
configManager = ConfigManagerHelper.INSTANCE;
return configManager;
}
}
参考文档
- 使用静态内部类实现单例设计模式
- 静态内部类里面定义这个静态方法就出错