首页 > 学院 > 开发设计 > 正文

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

2019-11-18 13:46:32
字体:
来源:转载
供稿:网友

  设计模式在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();
(未完待续)

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表