关于一个创建型模式的讨论:

03-05-16 liubing76
    



关于一个创建型模式的讨论:


我在构造一个web framework时,定义action其实就是struts的action,
当然他也是command模式。我在创建它时使用以下模式,
目前假设有两个action
public class loginAction extends action{

}
public class logoutAction extends action{

}

当初我使用了简单工厂方法,根据请求的urlpath动态创建,

public class actionFactory{
public static action(string urlpath){
if (urlpath.equal("")){
return loginAction();
}else if (urlpath.equal("")){
return logoutAction();
}
}
}
这个工厂方法,每次都创建新的action,性能不好,我们希望香struts一样使用cache,
于是我们改为,可以使用每次创建新的action,也可以使用cache创建,并且可以配置,
甚至客户可以二次开发,实现自己的工厂方法,只需实现一个接口,如下:

//定义创建接口
public interface actionFactory{
public action(string urlpath);
}

//每次都创建新的action
public class newActionFactory implements actionFactory{
public action(string urlpath){
if (urlpath.equal("")){
return loginAction();
}else if (urlpath.equal("")){
return logoutAction();
}
}
}
//使用cache创建模式。
public class cacheActionFactory implements actionFactory{
Hashmap cache=new HashMap();

public action(string urlpath){
if (urlpath.equal("..")){
if(cache.get("..')){
return (Action)cache.get("..')
} else{
Action obj=new loginAction();
cache.put("",obj );
retunrn obj;
}

}else if (urlpath.equal("")){
//省略
}
}
}


这样我们提供一个配置文件,客户可以动态决定使用那种工厂方式,来创建action,
如下:
actionFactory=cacheActionFactory;

这种方式我使用了,现在我不知道,这到底属于那种模式,
是工厂方法,还是抽象工厂,它们都不像??

我认为是 工厂方法,但是有的同时认为,不是?

可以参考设计模式的73页,参数化工厂方法??

大家可以讨论?