使用默认值创建和初始化类

时间:2013-11-29 10:34:47

标签: java java-ee design-patterns factory-pattern

在处理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
}

现在将用作

等实际实现的类
  1. Type1Populator extends AbstractDataPopulator
  2. Type2Populator extends AbstractDataPopulator
  3. 这些实现中的每一个都需要一组基于这些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);
          }
    }
    

    我还想用一些特定于每个实现的默认值初始化新创建的实例,但我不确定最好的方法是什么?

    1. 我应该定义另一种方法initDefaults
    2. 将这些依赖项传递给这些poulators的最佳方法是什么。
    3. 我认为方法很好还是过于复杂?

1 个答案:

答案 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

之类的内容使您的类具有通用性