我正在设计一个显示各种图表的软件,每个图表都使用明确定义的图表相关数据。为数据创建基类并从中扩展每个与图表相关的数据似乎是个好主意,因为它们有很多共同之处。定义图表的抽象基础来处理绘图和其他一些功能似乎也是合理的。为了反映设计中的图表 - 数据关系,我使用模板(Java中的代码):
public abstract class ChartData{
...
}
public abstract class Chart<T extends ChartData>{
public abstract void onNewData(T data);
...
}
public class ConcreteData extends ChartData{
...
}
public class ConcreteChart<ConcreteData>{
public void onNewData(ConcreteData data){
...
}
...
}
这种设计运作良好,并且足够灵活,可满足我的需求。但是,我从各个地方(如数据库,网络等)接收图表数据,为了测试目的,我愿意创建一个数据工厂。
我想提出一个想法:
到目前为止,我最好的方法是为数据类型创建一个枚举,并在工厂方法中添加一个switch-case,然后打开一个参数。我的问题是,有超过10个类扩展ChartData,这个函数的圈复杂度可以接受,并且违反了我的第3条规则。
解决方案不一定是单一方法,但如果它适合单个类,则会很好。
答案 0 :(得分:0)
如果我理解你的话,我可能会通过使用反射避免切换案例。约束是每个ChartData类必须具有无参数构造函数(或者它们必须都具有兼容的构造函数)。
我的Java有点生疏,但我相信像
public T createObject(Class<T> chartDataClass)
{
chartDataClass.newInstance()
}
是吗?
http://docs.oracle.com/javase/tutorial/reflect/member/ctorInstance.html