快速业务通道

设计模式在EJB中的应用 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21
式的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; }

Bridge模式中参与者还需要有行为接口的具体实现(ConcreteImplementor),在本例中是CatalogDAOImpl,虽然在目前宠物店中只有一个ConcreteImplementor,但是可扩展为到Mysql XML等数据源访问,比如你可以自己新增一个叫CatalogDAOImplMysql,也是作为CatalogDAO的子类。

看看CatalogDAO的一个子类CatalogDAOImpl的代码:

public class CatalogDAOImpl implements CatalogDAO {    protected static DataSource getDataSource()      throws CatalogDAOSysException {      try {        InitialContext ic = new InitialContext();        return (DataSource) ic.lookup(JNDINames.CATALOG_DATASOURCE);      }      catch (NamingException ne) {        throw new CatalogDAOSysException("NamingException while looking "          + "up DB context : "          + ne.getMessage());      }    } //具体Select语句在这里出现,这里主要是Oracle 数据库的访问语句 public Category getCategory(String categoryID, Locale l)    throws CatalogDAOSysException { Connection c = null;      PreparedStatement ps = null;      ResultSet rs = null;      Category ret = null; try {        c = getDataSource().getConnection(); ps = c.prepareStatement("select a.catid, name, descn "            + "from (category a join "            + "category_details b on "            + "a.catid=b.catid) "            + "where locale = ? "            + "and a.catid = ?",        ResultSet.TYPE_SCROLL_INSENSITIVE,        ResultSet.CONCUR_READ_ONLY);        ps.setString(1, l.toString());        ps.setString(2, categoryID);        rs = ps.executeQuery();        if (rs.first()) {          ret = new Category(rs.getString(1).trim(),          rs.getString(2),       

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号