Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > Java > 设计模式在EJB中的应用(2)
【标  题】:设计模式在EJB中的应用(2)
【关键字】:模式,设计,应用,EJB,设计模式,设计,EJB
【来  源】:网络

设计模式在EJB中的应用(2)

Your Ad Here

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),
         rs.getString(3));
       }
       rs.close();
       ps.close();

      c.close();
       return ret;
     }
     catch (SQLException se) {
       throw new CatalogDAOSysException("SQLException: "
       + se.getMessage());
     }


     ....

}

  Bridge模式参与者总结如下:

  商业逻辑抽象类 (CatalogEJB)

  抽象的商业逻辑操作.
   对DAOImplementor调用.
   不关心是具体什么数据源被使用(无论是Oracle还是JDBC还是XML).
   DAO(Data Access Object) (CatalogDAO)

  对数据源的抽象操作行为.
   提供了非常方便访问和维护管理数据的API结构.
   DAOImplementor (CatalogDAOImpl 有可能有CatalogDAOImplSybase CatalogDAOImplMysql 等)

  实现具体的DAO接口内容.
   使用Adapter模式,将特定的数据源驱动接口适配到DAO接口中去
   数据源 ( Oracle, or Sybase database via JDBC API)

  提供访问具体数据库的驱动接口,如包括连接池等.

  在使用数据源驱动接口时,需要使用Adapter模式,Adapter模式将两个不相关的类纠合在一起使用,Adapter模式实际是使用组合(composition)和继承(inheritance)两种方式再生类,在著名的"think in Java"的"类再生"专门提到这两个方式.

  很显然,如果你对Bridge模式和Adapter模式熟悉,那么对宠物店中的Catalog理解就会非常快,同样,在宠物店其他部分如订单 用户注册 等都能迅速理解。 (未完待续)

设计模式在EJB中的应用(3):【上一篇】
设计模式在EJB中的应用(1):【下一篇】
【相关文章】
  • 设计模式在EJB中的应用(3)
  • 设计模式在EJB中的应用(4)
  • JSP设计模式
  • 用JDBC开发基于客户/服务器模式的Internet/Intranet数据库软件(2)
  • J2EE设计模式浅谈(1)
  • J2EE设计模式浅谈(2)
  • jsp设计模式-经典
  • 设计模式的原则
  • 以对话框为主要界面的应用程序
  • 汇编语言程序设计
  • 【随机文章】
  • 企业信息化之点点滴滴
  • 用MRTG抓WINDOWS的CPU代码
  • 中文rsync手册
  • 开源 SOA 工具的编程技术: Apache Beehive 相关介绍
  • Z5NTS功能之netstat(网络工具)
  • 麒麟操作系统内核同其他操作系统内核的相似性分析
  • Struts,MVC的一种开放源码实现用这种 servlet 和 JSP 框架管理复杂的大型网站(3)
  • MSN 无法登录,错误代码 80048883/800401f4。
  • 用 FreeHand MX挤压工具做图案(3)
  • 讀《深入淺出Hibernate》筆記
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.