【发布时间】:2015-04-16 16:15:12
【问题描述】:
在选择要实例化的实现/子类时,我不清楚将 if/switch 放在哪里,特别是考虑到现在接口可以具有静态方法时。
假设我有一个服务、一个由接口定义的类型和几个实现。我想最好不要把这个逻辑放在服务中,而是有工厂方法。但它应该像this answer 中所建议的那样放在接口中还是放在另一个具有参数到类型映射的类中?
把它放在界面中对我来说似乎很自然:
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();
}
}
但是我不知道让接口知道它的实现,或者让父类知道它的子类型是否不好。所以
- 我应该把这个逻辑放在哪里?
- 如果我选择一个类型的子类,这会改变很多吗?
【问题讨论】:
-
类似的东西,但如果避免工厂类并将其放入接口本身是个好主意。
标签: java inheritance interface-implementation