/**
*
* 饿汉式单态类(不管有没有其他类调用该类,或者说不管有没有其他类使用该类,内部都已经创建了god对象,[说通俗一点就是急的不行,所以叫做饿汉式单态类])
* 还有一个懒汉式单态类(也就是懒惰的)
*/
public class God {
//static表示唯一的(饿汉式,急的不行,先new创建对象再说,不管有没有其他类调用该类)
private static God god = new God();
/**
* 把构造方法定义为private的,表示只有自己内部可以访问,外部无法访问(即外面无法通过new关键字创建该对象)
*/
private God() {
super();
}
/**
* 静态方法返回自己的实例
*
*/
public static God getGod() {
return god;
}
}
/**
*
* 懒汉式单态类
*/
public class LazyGod {
//懒汉式(先不创建对象,等要用到的时候再new创建对象)
private static LazyGod lazyGod = null;
private LazyGod() {
super();
}
/**
*
* 需要添加synchronized关键字,如果是多线程的程序的话,可以防止创建多个lazyGod对象,所以需要添加synchronized关键字
*/
public synchronized static LazyGod getLazyGod() {
if(lazyGod == null){
lazyGod = new LazyGod();
}
return lazyGod;
}
}
/**
*
* 数据库配置信息
*/
public interface DBConfig {
public static final String DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
public static final String URL = "jdbc:sqlserver://localhost:1433;databaseName=testDB";
public static final String USERNAME = "sa";
public static final String PASSWORD = "123456";
}
/**
* 单态数据库连接类(其实这不是严格意义上的单态连接类,因为用户还是可以通过DriverManager.getConnection()方法来得到
* conn对象,所以我们写的SingletonConnection这个类算是个伪单态类吧
* )
*/
public class SingletonConnection {
private static Connection conn = null;
private SingletonConnection() {
super();
}
/**
*
* 需要添加synchronized关键字,如果是多线程的程序的话,可以防止创建多个Connection对象,所以需要添加synchronized关键字
*/
public synchronized static Connection getConnection() throws ClassNotFoundException, SQLException {
if (conn == null) {
Class.forName(DBConfig.DRIVER);
conn = DriverManager.getConnection(DBConfig.URL, DBConfig.USERNAME, DBConfig.PASSWORD);
}
return conn;
}
/* (non-Javadoc)
* @see java.lang.Object#finalize()
* 重写父类Object类finalize()方法,在对象销毁的时候会自动调用该方法(类似于C++语言中的析构方法)
*/
@Override
protected void finalize() throws Throwable {
if (conn != null) {
conn.close();
conn = null;
}
}
}