什麼是設計模式
設計模式是一套被反復使用
毫無疑問
GoF的
設計模式和框架
現在
框架通常定義了應用體系的整體結構 類和對象的關系等等設計參數
另外
EJB中的設計模式
下面我們從設計模式的角度看看EJB的框架是怎樣的?在這之前假設你已經大概了解了設計模式
EJB是采取多層結構
EJB中將對數據庫進行調用(如發出select等語句)稱為會話bean(Sessionbean)
會話bean一般和客戶端應用是一一對應
我們以Java的寵物店中的Catalog為例
Bridge模式和Adapter模式
我們首先看看CatalogEJB代碼
public class CatalogEJB implements SessionBean {
protected CatalogDAO dao;
//從DAO工廠中獲取一個DAO 這是調用工廠(factory)模式的一個實例
public void ejbCreate() {
try {
dao = CatalogDAOFactory
}
catch (CatalogDAOSysException se) {
Debug
throw new EJBException(se
}
}
}
我們發現在CatalogEJB中並沒有通常的會話bean那樣有對數據庫操作的
在Catalog這個示例中使用了設計模式的Bridge模式
Bridge模式是將抽象和行為劃分開來
Bridge模式需要兩個接口(抽象類和接口通稱為接口)
public interface CatalogDAO {
public Category getCategory(String categoryID
throws CatalogDAOSysException;
public Page getCategories(int start
throws CatalogDAOSysException;
public Product getProduct(String productID
throws CatalogDAOSysException;
public Page getProducts(String categoryID
throws CatalogDAOSysException;
public Item getItem(String itemID
throws CatalogDAOSysException;
public Page getItems(String productID
throws CatalogDAOSysException;
public Page searchItems(String query
throws CatalogDAOSysException;
}
Bridge模式中參與者還需要有行為接口的具體實現(ConcreteImplementor)
看看CatalogDAO的一個子類CatalogDAOImpl的代碼
public class CatalogDAOImpl implements CatalogDAO {
protected static DataSource getDataSource()
throws CatalogDAOSysException {
try {
InitialContext ic = new InitialContext();
return (DataSource) ic
}
catch (NamingException ne) {
throw new CatalogDAOSysException(
+
+ ne
}
}
//具體Select語句在這裡出現
public Category getCategory(String categoryID
throws CatalogDAOSysException {
Connection c = null;
PreparedStatement ps = null;
ResultSet rs = null;
Category ret = null;
try {
c = getDataSource()
ps = c
+
+
+
+
+
ResultSet
ResultSet
ps
ps
rs = ps
if (rs
ret = new Category(rs
rs
rs
}
rs
ps
c
return ret;
}
catch (SQLException se) {
throw new CatalogDAOSysException(
+ se
}
}
Bridge模式參與者總結如下
商業邏輯抽象類 (CatalogEJB)
抽象的商業邏輯操作
對DAOImplementor調用
不關心是具體什麼數據源被使用(無論是Oracle還是JDBC還是XML)
DAO(Data Access Object) (CatalogDAO)
對數據源的抽象操作行為
提供了非常方便訪問和維護管理數據的API結構
DAOImplementor (CatalogDAOImpl 有可能有CatalogDAOImplSybase CatalogDAOImplMysql 等)
實現具體的DAO接口內容
使用Adapter模式
數據源 ( Oracle
提供訪問具體數據庫
From:http://tw.wingwit.com/Article/program/Java/gj/201311/27279.html