在处理Web应用程序时,我需要在几个步骤中获取一组类,我想将此逻辑分离为一个简单的Factory,以便基于类类型我们可以创建类实例以及init使用默认值。
Class层次结构的当前结构是
public interface DataPopulator<Source,Target>{
// some method decaration
}
抽象类
public abstract class AbstractDataPopulator<Source,Target> implements DataPopulator<Source, Target>{
// some common implimentation
}
现在将用作
等实际实现的类Type1Populator extends AbstractDataPopulator
。Type2Populator extends AbstractDataPopulator
。这些实现中的每一个都需要一组基于这些Populator正在执行的功能的公共依赖项。
截至目前,我正在使用new
创建实例,而不是使用简单的setter
方法填充这些依赖项。
我正在考虑创建一个像
这样的简单工厂模式public interface PopulatorFactory{
<T extends Object> T create(String className) throws Exception;
<T extends Object> T create(Class populatorClass) throws Exception;
}
抽象类
public abstract class DefaultPopulatorFactory impliments PopulatorFactory{
public <T> T create(final Class populatorClass) throws Exception{
return Class.forName(populatorClass);
}
// other method.
}
实施班级
public Type1PopulatorFactory extends DefaultPopulatorFactory {
public <T> T create(final Class populatorClass) throws Exception{
final T populator= super.create(populatorClass);
}
}
我还想用一些特定于每个实现的默认值初始化新创建的实例,但我不确定最好的方法是什么?
initDefaults
?答案 0 :(得分:0)
如果您要构建不那么重要的对象,通常最好使用 Builder 模式而不是工厂。
在您的情况下,如果您不需要外部数据源,您可以简单地为您的类编写构造函数,您可以在其中提供默认值并摆脱问题中的装置。
如果您使用构建器模式,则可以使用公共数据的Builder
对象和SomeOtherBuilder
扩展的Builder
来简化框架。添加专用实现的自定义值。您可以使用Builder
对象的类构造函数。
public class Builder {
// your fields go here
}
public class SomeOtherBuilder extends Builder {
// your specialized fields go here
}
public class YourClass {
public YourClass(Builder builder) {
// construct it here
}
}
您还可以使用T extends Builder
。