最近我尝试创建这样的东西:使用静态方法创建接口,该方法将返回实现该接口的类的实例。实现类将具有私有构造函数,接口将通过反射创建该类的实例。示例代码:
static Implementation getImplementation(){
Constructor<Implementation> constructor = Implementation.class.getDeclaredConstructor();
constructor.setAccessible(true);
return constructor.newInstance();
}
我省略了异常处理。 这个代码是出于某种目的的任何机会都有效,还是只是可怕的反模式?
答案 0 :(得分:0)
这通常使用抽象ImplementationFactory
来完成,它提供了一个静态方法,如
public static ImplementationFactory newInstance() { ... }
ImplementationFactory
然后有一个类似Implementation newInstance()
的方法。
例如,请参阅TransformerFactory.newInstance
。
有不同的方法来实现这一点。就像从META-INF/services
下的某个资源中读取实现类的名称一样。