我不清楚在选择要实例化的实现/子类时将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();
}
}
但是我不知道让接口知道它的实现是否不好,或者让父类知道它的子类型是否不好。所以
- 我应该把这个逻辑放在哪里?
- 如果我选择一种类型的子类,那会改变很多吗?