Java 抽象类实例化它自己的具体类
我在阅读ApacheOlingoV4源代码时遇到了这个问题。这是实例化具体类的已知模式 当抽象类Odata和concert类ODataImpl在newInstance方法中绑定在一起时,分离它们的优点或目的是什么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
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)的实现中看到过这种代码,但通常将实现作为参数传递给函数。