单例模式经常在使用在配置文件的读取上,这样整个工程只生成一个读取配置文件的实例.它经常和简单工厂模式一起使用.所以,偶经常把这两个模式整合起来叫做静态工厂模式.也不知道对不对,欢迎交流哦~
一般文献上说单例模式有三种类型,分别是:饿汉式,懒汉式和登记式.感觉自己经常接触的就是第一种饿汉式和懒汉式的,他们很相似,因为相对来说比较简单.
以前模仿后写的东西,有一年了吧,现在拿出来晒晒.是属于第二种的.
/** */
/**
*读取属性类.因为是用做配置类型信息的
*单例模式只创建一个实例
*/
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
public
class
SProperties
...
{
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
private static final String PFILE ="database.properties";![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
private File file = null;
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
private long lastModifiedTime = 0; //判断最后的修改时间以便读取最新的设置信息..
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
private Properties props = null;
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
private static SProperties instance = null;
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
//构造函数私有化.....
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
private SProperties() ...{
file = new File(PFILE);
lastModifiedTime = file.lastModified();
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
if (lastModifiedTime == 0) ...{
System.err.println(PFILE + "file does not exist");
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
props = new Properties();
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
try ...{
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
props.load(new FileInputStream(PFILE));
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
} catch (IOException e) ...{
e.printStackTrace();
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/** *//**
*@return SinglePattern的单一实例
*/
synchronized public static SProperties getInstance()
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{ if(instance==null)
new SProperties() ;
return instance;
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
//读取一个属性项
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
final public Object getConfigItem(String name, Object defaultVal) ...{
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
long newTime = file.lastModified();
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
if (newTime == 0) ...{
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
if (lastModifiedTime == 0) ...{
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
System.err.println(PFILE + "file does not exist");
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
} else ...{
System.err.println(PFILE + "file was deleted");
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
} else if (newTime > lastModifiedTime) ...{
props.clear();
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
try ...{
props.load(new FileInputStream(PFILE));
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
} catch (IOException e) ...{
e.printStackTrace();
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
lastModifiedTime = newTime;
Object val = props.getProperty(name);
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
if (val == null) ...{
return defaultVal;
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
} else ...{
return val;
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
}
}
调用:
//
获得连接
public
static
Connection getConnection()
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
String drivers =SProperties.getInstance().getConfigItem("jdbc.drivers","No found").toString();
//System.out.println (drivers);
String url =SProperties.getInstance().getConfigItem("jdbc.url","No found").toString();
//System.out.println (url);
String username=SProperties.getInstance().getConfigItem("jdbc.username","No found").toString();
String password=SProperties.getInstance().getConfigItem("jdbc.password","No found").toString();
//System.out.println (username);
//System.out.println (password);
try
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
Class.forName(drivers);
connect=DriverManager.getConnection(url,username,password);
}catch(ClassNotFoundException no)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
System.out.println("ClassNotFound Exception:::");
}catch(SQLException sqle)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
System.out.println("SQLException");
}
return connect;
}