use*_*908 11 java inheritance interface-implementation
我不清楚在选择要实例化的实现/子类时放置if/的位置switch,特别是考虑到现在接口可以有静态方法.
假设我有一个服务,一个由接口和几个实现定义的类型.我想最好不要把这个逻辑放在服务中,而是要有工厂方法.但是它应该在界面中还是在另一个类中使用此答案中建议的param-to-type映射?
把它放在界面中似乎很自然:
public interface MyInterface
{
public void doSomething();
public static MyInterface create(int param)
{
if (param == 0)
return new ImplA();
else
return new ImplB();
}
}
Run Code Online (Sandbox Code Playgroud)
然后只需从服务中调用它:
public class MyService
{
public void serveMe(int param)
{
MyInterface.create(param).doSomething();
}
}
Run Code Online (Sandbox Code Playgroud)
但是我不知道接口是否知道它的实现,或者父类知道它的子类型是不是很糟糕.所以
使用Factory此.这样你就可以维护single responsibility principle.interface然而,在我自己的一个项目中定义了一种方法,该方法确定应该使用这种特定实现的参数类型.由于这个和使用Reflections,整个过程是自动化的.Reflections查找实现给定的所有类,interface并将其"usage-type"存储在地图中以便快速查找.感谢这样的解决方案,如果他需要新的实现,所有开发人员必须做的就是创建它.系统的其他部分不需要进行其他修改,甚至在工厂类别也不需要.
Reflections 具有很好的功能,可以在编译时存储元数据,因此运行时查找正确的类是一眨眼