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

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页,参数化工厂方法??

大家可以讨论?