Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 设计工厂以创建基类的子类_Design Patterns_Architecture_Factory Pattern_Software Design - Fatal编程技术网

Design patterns 设计工厂以创建基类的子类

Design patterns 设计工厂以创建基类的子类,design-patterns,architecture,factory-pattern,software-design,Design Patterns,Architecture,Factory Pattern,Software Design,我正在设计一个显示各种图表的软件,每个图表都使用定义良好的图表相关数据。为数据创建一个基类并从中扩展每个与图表相关的数据似乎是一个好主意,因为它们有很多共同点。为图表定义一个抽象的基础来处理绘图和其他一些功能似乎也是合理的。为了在设计中反映图表数据关系,我使用了模板(Java代码): 公共抽象类ChartData{ ... } 公共抽象类图{ 公开摘要数据(T数据); ... } 公共类ConcreteData扩展了ChartData{ ... } 公共类图表{ 公共void onNewData

我正在设计一个显示各种图表的软件,每个图表都使用定义良好的图表相关数据。为数据创建一个基类并从中扩展每个与图表相关的数据似乎是一个好主意,因为它们有很多共同点。为图表定义一个抽象的基础来处理绘图和其他一些功能似乎也是合理的。为了在设计中反映图表数据关系,我使用了模板(Java代码):

公共抽象类ChartData{
...
}
公共抽象类图{
公开摘要数据(T数据);
...
}
公共类ConcreteData扩展了ChartData{
...
}
公共类图表{
公共void onNewData(混凝土数据){
...
}
...
}
这个设计很好,足够灵活,满足我的需要。然而,我从不同的地方(如数据库、网络等)接收图表数据,出于测试目的,我愿意创建一个数据工厂

我正试图想出一个想法:

  • 一节课
  • 它能够创建扩展ChartData的所有类
  • 这是灵活的,所以它不会打破我的设计
到目前为止,我最好的方法是为数据类型创建一个枚举,并在工厂方法中添加一个开关大小写,打开一个参数。我的问题是,有10多个扩展ChartData的类,这个函数的圈复杂度远远超过了可接受的范围,并且打破了我的第三条规则


解决方案不必是单个方法,但如果它适合单个类,那就太好了。

如果我理解正确,我可能会使用反射来避免切换情况。约束条件是每个ChartData类必须有一个无参数构造函数(或者它们都必须有兼容的构造函数)

我的Java有点生锈,但我相信

public T createObject(Class<T> chartDataClass)
{
    chartDataClass.newInstance()
}
public T createObject(类chartDataClass)
{
chartDataClass.newInstance()
}
是吗


使用反射并不是我想要的,因为我想要一个独立于语言的体系结构解决方案来解决这个问题。
public T createObject(Class<T> chartDataClass)
{
    chartDataClass.newInstance()
}