在实训中遇到的第一个设计模式,稍微记录下
“保证一个类仅有一个实例,并提供一个访问它的全局访问点。” ----艾迪生维斯理, 1994
- 目的: 将类的责任集中到唯一的单体对象中,确保该类只有一个实例,并且为该类提供一个全局访问点
- 实现方法:
1、提供唯一的私有构造器,避免多个单体对象被创建。
2、使用静态域(staticfield)维护实例
3、使用静态方法来监视实例的创建 - 实例化方法:
1、加载时实例化
2、使用时实例化(惰性初始化)
实训源码(数据库连接类),加载时实例化
public class DbconMysql {
private final static DbconMysql dbm = new DbconMysql(); //静态域维护实例
static InputStream in = null;
static Properties p = null;
Connection con =null;
static{
try {
in = DbconMysql.class.getResourceAsStream("jdbc.properties");
p = new Properties();
p.load(in);
} catch(Exception e) {
e.printStackTrace();
} finally {
try {
in.close();
} catch(IOException e) {
e.printStackTrace();
}
}
}
// 单例模式创建对象
// 唯一私有构造器
private DbconMysql() {
}
//获取该对象的方法
// 静态方法监视实例的创建
public static DbconMysql getDbconMysql(){
return dbm;
}
//返回数据库连接
public Connection getCon(){
try {
System.out.println(p.getProperty("drivername"));
Class.forName(p.getProperty("drivername"));
try {
con = DriverManager.getConnection(p.getProperty("url"), p.getProperty("username"), p.getProperty("password"));
return con;
} catch (SQLException e) {
e.printStackTrace();
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
if (con != null) {
System.out.println("db connected");
} else {
System.out.println("db connect failed");
}
return con;
}
}