设计模式在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();
(未完待续)
闽公网安备 35060202000074号