background image

  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;

  }