singleton pattern 单例模式
背景:在建立与数据库的连接时,可以创建一个属性文件,然后创建一个工具类来读取属性文件(配置文件),其中 要用到I/O流,但是I/O流很耗费资源,所以可以使用单例模式控制工具类实例的生成个数,那么什么是单例模式呢?如何使用?
单例模式可以控制类的实例的生成个数,即单例模式可以保证系统中一个类只有一个实例
单例模式的特点:
-
某个类只能有一个实例
-
它必须自行创建这个实例
-
它必须自行向整个系统提供这个实例
具体实现
-
单例模式的类只提供私有的构造函数
-
类定义中含有一个该类的静态私有对象
-
该类提供一个静态的共有的函数用于创建或者获取它本身的静态私有对象
将构造函数设成private(即不想让别人用new 方法来创建多个对象)是单例模式经常用到的方式,可以在类里面生成一个对象,然后写一个public static方法把这个对象return出去。(eg:public 类名 getInstance(){return 你刚刚生成的那个类对象;})如果要用这个类的实例就用类名.getInstance()获得这个对象。
eg.
public class ConfigManager{
private static ConfigManager configManager;
private static Properties properties;
private ConfigManager(){
String configFile="***.properties";
properties=new Properties();
InputStream in= ConfigManager.class.getClassLoader().getResourceAsStream(configFile);
properties.load(in);
in.close();
}
}<pre class="java" name="code"> public static ConfigManager getInstance(){//静态获得该类型对象的方法
if(configManager==null){
configManager=new Configmanager();//保证只有一个对象
}
return configManager;<pre class="java" name="code"> public String getString (Sting key){
return properties.getProperty(key);
}
}
调用
public boolean getConnection(){
//读出配置信息
String driver=ConfigManager.getInstance().getString("jdbc.driver_class");
String url=ConfigManager.getInstance().getString("jdbc.connection.url");
String username=ConfigManager.getInstance().getString("jdbc.connection.username");
String password=ConfigManager.getInstance().getString("jdbc.connection.password");
try {
//1.加载驱动 Class.forName()
Class.forName(driver);
//2.获得数据库连接(Connection)
conn=DriverManager.getConnection(url,username,password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
return false;
} catch (SQLException e) {
e.printStackTrace();
return false;
}
return true;
}
附:属性文件database.properties
jdbc.driver_class=oracle.jdbc.driver.OracleDriver
jdbc.connection.url=jdbc:oracle:thin:@localhost:1521:orcl
jdbc.connection.username=user
jdbc.connection.password=tiger
以上是本人自己的见解和总结 ,希望对自己和他人都有所帮助!