WEB开发网
开发学院WEB开发Jsp 设计模式在EJB中的应用(3) 阅读

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

 2008-01-05 09:34:21 来源:WEB开发网   
核心提示:设计模式在EJB中的应用(3) Factory模式和Singleton模式 该模式类似new,是用来创建对象的,设计模式在EJB中的应用(3),使用Factory模式是为了实现面向对象的基本原则.封装(Encapsulation)和分派(Delegation);将创建对象与使用对象进行分工

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

   Factory模式和Singleton模式

   该模式类似new,是用来创建对象的,使用Factory模式是为了实现面向对象的基本原则.封装(Encapsulation)和分派(Delegation);将创建对象与使用对象进行分工。因此在平时开发过程中,尽量使用Factory模式创建对象。

本例CatalogEJB中是使用Factory模式获得一个DAO的具体实例对象,见上面CatalogEJB代码中注释。我们看看CatalogDAOFactory的代码:

public class CatalogDAOFactory {
   public static CatalogDAO getDAO() throws CatalogDAOSysException {

  CatalogDAO catDao = null;
     try {
       InitialContext ic = new InitialContext();
       String className = (String) ic.lookup(JNDINames.CATALOG_DAO_CLASS);
       catDao = (CatalogDAO) Class.forName(className).newInstance();
     } catch (NamingException ne) {
       ...

  }
     return catDao;
}

在CatalogDAOFactory可以依据系统的配置文件,动态获得DAO的方法,之所以采取动态方式,当然便于用户自己增加自己的DAO方式,而不必修改代码,只要直接修改配置文件就可以。

假如在这里只需要CatalogDAOFactory产生一个实例,可以采取Singleton模式,Singleton的目的是控制类实例对象的创建,并且答应整个程序只在一点对它进行访问。Singleton本身类只能创建一个,是单线程。

public class CatalogDAOFactory {
   PRivate static CatalogDAO catDao = null;

public static CatalogDAO getIntance(){
     if (catDao==null)
       try {
         InitialContext ic = new InitialContext();
         String className =
            (String) ic.lookup(JNDINames.CATALOG_DAO_CLASS);
         catDao = (CatalogDAO) Class.forName(className).newInstance();
       } catch (NamingException ne) {
         ...

    }
     }
     return catDao;

}
}

那么在CatalogEJB的调用从
   dao = CatalogDAOFactory.getDAO();

   要改为
   dao = CatalogDAOFactory.getIntance();
(未完待续)

Tags:设计模式 EJB 应用

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接