关于struts中ModuleConfigFactory的一点疑惑

watertao 05-09-09

struts中读取模块配置采用了这样的工厂方法
一个接口:ModuleConfig.java
一个抽象类:ModuleConfigFactory.java
一个ModuleConfig的实现类:ModuleConfigImpl.java
一个ModuleConfigFactory的子类:DefaultModuleConfigFactory.java

ModuleConfig接口主要定义了一些配置文件读取设置之类的方法。
ModuleConfigImpl只是简单的实现了这些方法。

下面是ModuleConfigFactory抽象类的代码(省略了一些与问题无关的代码):


public abstract class ModuleConfigFactory {

public abstract ModuleConfig createModuleConfig(String prefix);

public static String getFactoryClass() {
return (ModuleConfigFactory.factoryClass);
}

public static void setFactoryClass(String factoryClass) {
ModuleConfigFactory.factoryClass = factoryClass;
ModuleConfigFactory.clazz = null;
}

public static ModuleConfigFactory createFactory() {

ModuleConfigFactory factory = null;

try {
if (clazz == null) {
clazz = RequestUtils.applicationClass(factoryClass);
}

factory = (ModuleConfigFactory) clazz.newInstance();

} catch (Exception e) {
}

return factory;

}

protected static Class clazz = null;

protected static String factoryClass =
"org.apache.struts.config.impl.DefaultModuleConfigFactory";

}


下面是DefaultModuleConfigFactory类的代码:


public class DefaultModuleConfigFactory extends ModuleConfigFactory implements Serializable{
// --------------------------------------------------------- Public Methods

public ModuleConfig createModuleConfig(String prefix) {

return new ModuleConfigImpl(prefix);

}



}


那么现在我的问题是为什么这里还要用一些不同的工厂实现类去生成ModuleConfig?直接用一个工厂来生成不同的ModuleConfig不就行了么?

改成这样不知道行不行:
一个接口:ModuleConfig.java(与原来的没啥两样)
一个实现类:ModuleConfigImpl.java(与原来的一样)
然后去掉DefaultModuleConfigFactory类,并修改ModuleConfigFactory如下:


public class ModuleConfigFactory {


public static String getConfigClass() {
return (ModuleConfigFactory.configClass);
}

public static void setConfigClass(String configClass) {
ModuleConfigFactory.configClass = configClass;
ModuleConfigFactory.clazz = null;
}

public static ModuleConfig createModuleConfig () {
ModuleConfig config = null;

try {
if (clazz == null) {
clazz = RequestUtils.applicationClass(configClass);
}

config = (ModuleConfig) clazz.newInstance();

} catch (ClassNotFoundException e) {
}

return config;

}

protected static Class clazz = null;

protected static String configClass =
"org.apache.struts.config.impl.ModuleConfigImpl";


}

banq
2005-09-13 12:32

这其实是使用工厂模式的好处,为了ModuleConfig预留发展余地,可能有不同实现。