Java 抽象类实例化它自己的具体类

Java 抽象类实例化它自己的具体类,java,design-patterns,olingo,Java,Design Patterns,Olingo,我在阅读ApacheOlingoV4源代码时遇到了这个问题。这是实例化具体类的已知模式 当抽象类Odata和concert类ODataImpl在newInstance方法中绑定在一起时,分离它们的优点或目的是什么 public abstract class OData { private static final String IMPLEMENTATION = "org.apache.olingo.server.core.ODataImpl"; public static OData

我在阅读ApacheOlingoV4源代码时遇到了这个问题。这是实例化具体类的已知模式

当抽象类Odata和concert类ODataImpl在newInstance方法中绑定在一起时,分离它们的优点或目的是什么

public abstract class OData {

  private static final String IMPLEMENTATION = "org.apache.olingo.server.core.ODataImpl";

  public static OData newInstance() {
    try {
      final Class<?> clazz = Class.forName(OData.IMPLEMENTATION);

      /*
       * We explicitly do not use the singleton pattern to keep the server state free
       * and avoid class loading issues also during hot deployment.
       */
      final Object object = clazz.newInstance();

      return (OData) object;

    } catch (final Exception e) {
      throw new ODataRuntimeException(e);
    }
  }

您可以在没有具体类的情况下编译此代码。也许缺少ODataImpl是一种有效的状态,我猜很容易将实现路径更改为一个字符串。最终,这个字符串可以存储在以后的首选项中。我在Simple Factory(也称为ConcreteFactory)的实现中看到过这种代码,但通常将实现作为参数传递给函数。