亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2396 | 回復(fù): 0
打印 上一主題 下一主題

Singleton模式(轉(zhuǎn)載) [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2010-01-07 20:52 |只看該作者 |倒序瀏覽

Java Singleton 模式用來保證在運行的應(yīng)用程序中,一個Class只是實例化一次,也就是只有一個相應(yīng)的對象存在。在 web 程序中我們會用一個核心的分配功能的Servlet程序,在這里我們就可以運用這種設(shè)計模式了。
一般Singleton模式通常有幾種種形式:
第一種形式:
   定義一個類,它的構(gòu)造函數(shù)為private的,它有一個static的private的該類變量,在類初始化時實例話,通過一個public的getInstance方法獲取對它的引用,繼而調(diào)用其中的方法。
public class Singleton {
    private Singleton(){}
   
    //在自己內(nèi)部定義自己一個實例,是不是很奇怪?
    //注意這是private 只供內(nèi)部調(diào)用
    private static Singleton instance = new Singleton();
   
    //這里提供了一個供外部訪問本class的靜態(tài)方法,可以直接訪問
    public static Singleton getInstance() {
            return instance;
    }
}
第二種形式:
public class Singleton {
    private static Singleton instance = null;
  
     public static synchronized Singleton getInstance() {
                //這個方法比上面有所改進,不用每次都進行生成對象,只是第一次
                //使用時生成實例,提高了效率!
                if (instance==null)
                        instance=new Singleton();
                return instance; }
      }
例子:
/**
* 數(shù)據(jù)庫連接管理類
*/
public class DBManager {
    private static Logger logger = Logger.getLogger(DBManager.class);
    /**
     * 本靜態(tài)變量用來存放本系統(tǒng)啟動時由Struts生成的連接池的數(shù)據(jù)源
     */
    private static DataSource datasource;
    /**
     * 由于本類使用單態(tài)設(shè)計模式,因此不允許在使用中通過New進行實例化,那么本類就要提供一個 此類的實例供外界使用,這就是供外界使用的實例
     */
    private static DBManager dbConManager = new DBManager();//類被加載時構(gòu)建實例
    private DBManager() {
    }
    /**
     * 此靜態(tài)方法用來向類的靜態(tài)變量賦值,用來在系統(tǒng)中使用
     *
     * @param mydatasource
     *            傳入的struts生成的數(shù)據(jù)源
     */
    public void setDatasource(DataSource mydatasource) {
        logger.info("設(shè)置數(shù)據(jù)源");
        if (datasource == null) {
            datasource = mydatasource;
        }
    }
    /**
     * 由于本類使用單態(tài)模式,不允許其他的類使用New進行創(chuàng)建實例 因此在這里提供一個共有的靜態(tài)方法來向外界提供自己的一個實例。
     *
     * @return 返回本類的唯一實例
     */
    public static DBManager getInstance() {
        logger.info("獲得數(shù)據(jù)庫連接管理類的實例");
        return dbConManager;
    }
    /**
     * 此方法提供一個可用的數(shù)據(jù)庫連接,從連接池中取得可用連接
     *
     * @return 可用的數(shù)據(jù)庫連接
     * @throws java.lang.SQLException
     *             有可能要拋出的SQL異常
     */
    public Connection getConnection() throws SQLException {
        Connection conn = null;
        try {
            logger.info("從連接池中獲得空閑的數(shù)據(jù)庫連接");
            conn = datasource.getConnection();
            return conn;
        } catch (SQLException ex) {
            logger.error("DBManager.getConnection(獲取數(shù)據(jù)庫連接失敗):[SQLException]"
                    + ex.getMessage());
            throw ex;
        }
    }
    /**
     * 這是一個用來關(guān)閉所有的數(shù)據(jù)庫連接相關(guān)的打開對象的方法,這樣作的好處是不用在每一次調(diào)用了sql之后 要寫一大串的關(guān)閉操作。
     *
     * @param conn
     *            將要關(guān)閉的數(shù)據(jù)庫連接
     * @param st
     *            將要關(guān)閉的數(shù)據(jù)庫操作對象
     * @param pst
     *            將要關(guān)閉的預(yù)處理數(shù)據(jù)庫操作對象
     * @param cst
     *            將要關(guān)閉的數(shù)據(jù)庫存儲過程調(diào)用對象
     * @param rst
     *            將要關(guān)閉的數(shù)據(jù)庫記錄集對象
     * @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("數(shù)據(jù)庫對象關(guān)閉出錯!"+e.getMessage(),e);
        }
    }
}


本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u2/67175/showart_2143393.html
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP