Factory模式和Singleton模式
該模式類似new
本例CatalogEJB中是使用Factory模式獲得一個DAO的具體實例對象
public class CatalogDAOFactory {
public static CatalogDAO getDAO() throws CatalogDAOSysException {
CatalogDAO catDao = null;
try {
InitialContext ic = new InitialContext();
String className = (String) ic
catDao = (CatalogDAO) Class
} catch (NamingException ne) {
}
return catDao;
}
在CatalogDAOFactory可以依據系統的配置文件
如果在這裡只需要CatalogDAOFactory產生一個實例
public class CatalogDAOFactory {
private static CatalogDAO catDao = null;
public static CatalogDAO getIntance(){
if (catDao==null)
try {
InitialContext ic = new InitialContext();
String className =
(String) ic
catDao = (CatalogDAO) Class
} catch (NamingException ne) {
}
}
return catDao;
}
}
那麼在CatalogEJB的調用從
dao = CatalogDAOFactory
要改為
dao = CatalogDAOFactory
Facade模式
在EJB應用中
但是如果用戶端直接和這些bean互動
那麼我們使用Facade模式來解決這個問題
在寵物店中
public class ShoppingClientFacadeLocalEJB implements SessionBean {
//和CustomerEJB聯系
public CustomerLocal getCustomer() throws FinderException {
if (userId == null) {
}
try {
InitialContext ic = new InitialContext();
Object o = ic
CustomerLocalHome home =(CustomerLocalHome)o;
customer = home
} catch (javax
}
return customer;
}
//和ShoppingCartEJB聯系
public ShoppingCartLocal getShoppingCart() {
if (cart == null) {
try {
InitialContext ic = new InitialContext();
Object o = ic
ShoppingCartLocalHome home =(ShoppingCartLocalHome)o;
cart = home
} catch (javax
}
}
return cart;
}
}
Facade模式參與者
SessionFacade (ShoppingClientFacadeLocalEJB)
提供一組操作流程
將真正工作委托到EJB的bean
EJB的bean (CustomerEJB
執行基本的商業邏輯操作
沒有任何對SessionFacade的調用
這樣不但可擴展性大大增強
總結
在EJB的具體使用中
例如Proxy模式可以為我們在訪問巨大的需要花費一定時間才能展開的對象時
Flyweight模式是避免大量擁有相同內容的小類的開銷(如耗費內存)
From:http://tw.wingwit.com/Article/program/Java/gj/201311/27393.html