本例CatalogEJB中是使用Factory模式獲得一個(gè)DAO的具體實(shí)例對象,見上面CatalogEJB代碼中注釋。我們看看CatalogDAOFactory的代碼:
public class CatalogDAOFactory {
public static CatalogDAO getDAO() throws CatalogDAOSysException {
CatalogDAO catDao = null;
try {
InitialContext ic = new InitialContext();
String className = (String) ic.lookup(JNDINames.CATALOG_DAO_CLASS);
catDao = (CatalogDAO) Class.forName(className).newInstance();
} catch (NamingException ne) {
...
}
return catDao;
}
在CatalogDAOFactory可以依據(jù)系統(tǒng)的配置文件,動態(tài)獲得DAO的方法,之所以采取動態(tài)方式,當(dāng)然便于用戶自己增加自己的DAO方式,而不必修改代碼,只要直接修改配置文件就可以。
假如在這里只需要CatalogDAOFactory產(chǎn)生一個(gè)實(shí)例,可以采取Singleton模式,Singleton的目的是控制類實(shí)例對象的創(chuàng)建,并且答應(yīng)整個(gè)程序只在一點(diǎn)對它進(jìn)行訪問。Singleton本身類只能創(chuàng)建一個(gè),是單線程。
public class CatalogDAOFactory {
PRivate static CatalogDAO catDao = null;
public static CatalogDAO getIntance(){
if (catDao==null)
try {
InitialContext ic = new InitialContext();
String className =
(String) ic.lookup(JNDINames.CATALOG_DAO_CLASS);
catDao = (CatalogDAO) Class.forName(className).newInstance();
} catch (NamingException ne) {
...
}
}
return catDao;
}
}
那么在CatalogEJB的調(diào)用從
dao = CatalogDAOFactory.getDAO();
要改為
dao = CatalogDAOFactory.getIntance();
(未完待續(xù))
新聞熱點(diǎn)
疑難解答
圖片精選