使用 Java 8 在运行时选择具体实现
在选择要实例化的实现/子类时,我不清楚在哪里放置/,特别是考虑到现在接口可以具有静态方法时。if
switch
假设我有一个服务,一个由接口定义的类型和几个实现。我想最好不要把这个逻辑放在服务中,而是有工厂的方法。但是,它应该像这个答案中建议的那样进入接口还是另一个具有参数到类型映射的类中?
对我来说,把它放在界面中似乎很自然:
public interface MyInterface
{
public void doSomething();
public static MyInterface create(int param)
{
if (param == 0)
return new ImplA();
else
return new ImplB();
}
}
然后只需从服务中调用它:
public class MyService
{
public void serveMe(int param)
{
MyInterface.create(param).doSomething();
}
}
但我不知道让接口知道它的实现,或者让父类知道它的子类型是不好的。所以
- 我应该把这个逻辑放在哪里?
- 如果我选择某种类型的子类,这会改变很多吗?