Java Singleton 模式用來保證在運行的應用程序中,一個Class只是實例化一次,也就是只有一個相應的對象存在。在 web 程序中我們會用一個核心的分配功能的Servlet程序,在這裡我們就可以運用這種設計模式了。
一般Singleton模式通常有幾種種形式:
第一種形式:
定義一個類,它的構造函數為private的,它有一個static的private的該類變量,在類初始化時實例話,通過一個public的getInstance方法獲取對它的引用,繼而調用其中的方法。
第二種形式:
例子:
/**
* 由於本類使用單態模式,不允許其他的類使用New進行創建實例 因此在這裡提供一個共有的靜態方法來向外界提供自己的一個實例。
*
* @return 返回本類的唯一實例
*/
public static DBManager getInstance() {
logger.info("獲得數據庫連接管理類的實例");
return dbConManager;
}
/**
* 此方法提供一個可用的數據庫連接,從連接池中取得可用連接
*
* @return 可用的數據庫連接
* @throws Java.lang.SQLException
* 有可能要拋出的SQL異常
*/
public Connection getConnection() throws SQLException {
Connection conn = null;
try {
logger.info("從連接池中獲得空閒的數據庫連接");
conn = datasource.getConnection();
return conn;
} catch (SQLException ex) {
logger.error("DBManager.getConnection(獲取數據庫連接失敗):[SQLException]"
+ ex.getMessage());
throw ex;
}
}
/**
* 這是一個用來關閉所有的數據庫連接相關的打開對象的方法,這樣作的好處是不用在每一次調用了sql之後 要寫一大串的關閉操作。
*
* @param conn
* 將要關閉的數據庫連接
* @param st
* 將要關閉的數據庫操作對象
* @param pst
* 將要關閉的預處理數據庫操作對象
* @param cst
* 將要關閉的數據庫存儲過程調用對象
* @param rst
* 將要關閉的數據庫記錄集對象
* @throws Java.lang.Exception
* 有可能要拋出的異常
*/
public void closeAll(Connection conn, Statement st, PreparedStatement pst,
CallableStatement cst, ResultSet rst) throws DBManagerException {
try {
if (rst != null) {
rst.close();
}
if (st != null) {
st.close();
}
if (pst != null) {
pst.close();
}
if (cst != null) {
cst.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
throw new DBManagerException("數據庫對象關閉出錯!"+e.getMessage(),e);
}
}
}