服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

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


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

扫描关注微信公众号