我有一个设计问题要问。到目前为止我还没有写任何代码,只是在思考如何实现这一点。我有一个 A 类型的对象,它包含一个 B 类型的对象。我希望 B 定义一个对象类别(接口或抽象类?)。然后我有一个 xml 文件,它定义了 B 应该是的子类型。例如,如果 B 是一个名为 Driveable 的接口,那么“car”或“truck”可能会在 xml 中定义为类型 A 所需的 Drivable 对象。
我想做的是让 B 成为一个接口,然后创建一个静态工厂类,它有一个工厂方法来确定应该给什么子类型 B 一个 xml 文件。所以我的第一个问题是这是解决问题的最佳方法吗?使用抽象类而不是接口会更好还是主要只是个人喜好?
其次,如果我确实使用接口,那么在我的工厂方法中我会这样做:
B createB(File f){
...
String type = ...
if(type.equals("car"))
return new CarType();
else if(type.equals("truck"))
return new TruckType();
...
return null;
}
所以每次我添加一个新的 B 子类型时,我都需要在这个方法中添加另一个 if 语句。有没有更好的方法来做到这一点,所以我所要做的就是创建一个新的 B 子类型,然后更新我的 xml 而不是更新工厂方法?我本质上不想将 B 的类型硬编码到我的工厂方法中。如果我上面的内容是带有工厂方法的非常标准的协议,那么我可以用这种方式处理它,只是看起来不太对。