关于一个创建型模式的讨论:
我在构造一个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页,参数化工厂方法?? 大家可以讨论?
|
|