Bridge 模式和 Adapter 模式
我们首先看看 CatalogEJB 代码:
public
class
CatalogEJB
implements
SessionBean {
protected
CatalogDAO dao;
//从 DAO 工厂中获取一个 DAO 这是调用工厂(factory)模式的一个实例
public
void
ejbCreate() {
try
{
dao = CatalogDAOFactory.getDAO();
}
catch
(CatalogDAOSysException se) {
Debug.println("Exception getting dao " + se);
throw
new
EJBException(se.getMessage());
}
}
....
}
我们发现在 CatalogEJB 中并没有通常的会话 bean 那样有对数据库操作的"select ..
from ."等之类 SQL 操作语句,这些都被封装到 DAO 的具体实现中(Concrete
class
).
在 Catalog 这个示例中使用了设计模式的 Bridge 模式,判断是否是某种模式,主要依
据其参与者的种类和相互关系,我们先看看 Bridge 模式的定义和参与者:
Bridge 模式是将抽象和行为划分开来,各自独立,但能动态的结合起来(好象搭建了一
座桥)。在本例中,是将商业逻辑和数据库访问这样的行为划分开来,数据库访问专门放
置在 DAO 中了。
Bridge 模式需要两个接口(抽象类和接口通称为接口),一个用来封装抽象部分,本例
中是封装商业逻辑,是 CatalogEJB;还有一个是封装行为(Implementor),本例中是
CatalogDAO,看看 CatalogDAO 代码:
public
interface
CatalogDAO {
public
Category getCategory(String categoryID, Locale l)
throws
CatalogDAOSysException;
public
Page getCategories(
int
start,
int
count, Locale l)
throws
CatalogDAOSysException;
public
Product getProduct(String productID, Locale l)
throws
CatalogDAOSysException;
public
Page getProducts(String categoryID,
int
start,
int
count, Locale l)
throws
CatalogDAOSysException;
public
Item getItem(String itemID, Locale l)
throws
CatalogDAOSysException;
public
Page getItems(String productID,
int
start,
int
size, Locale l)
throws
CatalogDAOSysException;
public
Page searchItems(String query,
int
start,
int
size, Locale l)
throws
CatalogDAOSysException;
}