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