本例CatalogEJB中是使用Factory模式獲得一個DAO的具體實例對象,見上面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可以依據系統的配置文件,動態獲得DAO的方法,之所以采取動態方式,當然便于用戶自己增加自己的DAO方式,而不必修改代碼,只要直接修改配置文件就可以。
假如在這里只需要CatalogDAOFactory產生一個實例,可以采取Singleton模式,Singleton的目的是控制類實例對象的創建,并且答應整個程序只在一點對它進行訪問。Singleton本身類只能創建一個,是單線程。
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的調用從
dao = CatalogDAOFactory.getDAO();
要改為
dao = CatalogDAOFactory.getIntance();
(未完待續)
新聞熱點
疑難解答