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