Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/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
Java 将多个对象合并为多种格式_Java_Inheritance_Design Patterns - Fatal编程技术网

Java 将多个对象合并为多种格式

Java 将多个对象合并为多种格式,java,inheritance,design-patterns,Java,Inheritance,Design Patterns,我正在寻找适用于具有多个DataObjects和多个输出格式(ReportGenerators)的情况的最佳设计 当前的设置是这样的:有一个Formattable接口,它有一个ReportGenerator使用的各种方法。每个DataObject(DataObject可以是几个不同的不相关类中的任何一个)实现Formattable——即,它知道如何组织报表的特定数据,而ReportGenerator只需输入Formattable对象,它就可以从中访问字符串数组并对其进行修饰 1) 这是我的第一个

我正在寻找适用于具有多个
DataObject
s和多个输出格式(
ReportGenerator
s)的情况的最佳设计

当前的设置是这样的:有一个
Formattable
接口,它有一个
ReportGenerator
使用的各种方法。每个
DataObject
DataObject
可以是几个不同的不相关类中的任何一个)实现
Formattable
——即,它知道如何组织报表的特定数据,而
ReportGenerator
只需输入
Formattable
对象,它就可以从中访问字符串数组并对其进行修饰

1) 这是我的第一个问题:这是否明智?因为结果是组织报表数据的过程遍布所有的
DataObject
s。另一种选择是一个中间类,它有一大堆
instanceof
检查要格式化的
数据对象的类型,但至少在一个位置上都是这样


2) 然后我的新问题是,我需要引入一个次要的
ReportGenerator
,它需要稍微不同的
DataObject
数据组织。在当前设置中,我可以在
Formattable
方法中引入一个参数,以指定
DataObject
应该为哪种类型的
ReportGenerator
进行自身格式化,但同样,我不确定这是否可取。

让我们用高级指针来解决您的高级问题:

数据对象可以是几个不同的不相关类中的任意一个) 实现Formattable——即,它知道如何组织其特定的 报告的数据

您说DataObject将组织数据,然后您说:

ReportGenerator只需向其提供可格式化的对象 访问字符串数组并对其进行修饰

格式化和组织之间真的有区别吗?在某种程度上,组织数据似乎是格式化数据的一个初步步骤,理想情况下,应该将其视为一项单独的职责,而不是将其视为多项职责。将其转换为代码意味着单个类应该组织/格式化(这些术语似乎是可交换的)数据。ReportGenerator将是这方面的首选

然后我的新问题是,我需要引入第二个 ReportGenerator,需要稍微组织数据对象数据 不同的

如果ReportGenerator负责组织/格式化数据,那么这个问题也应该得到解决


总之,将数据的组织从DataObjects转移到ReportGenerator是一个好主意

几个简短的问题。一个数据对象是否表示一种报告?假设SalesDataObject代表销售报告,SalaryDataObject代表付款报告?销售报告本身可以有不同的格式吗?或者一种类型的报告的格式是恒定的?如果不同的Formattable.format方法之间几乎没有重叠,这似乎很好。如果你想把所有的东西都放在一个地方,我建议使用访问者模式而不是instanceof checks;在单个DataObject层次结构中,虽然层次结构中的每个子类的格式略有不同,但报告实际上并没有变化。在不同的数据对象之间,报告的差异确实更大。关于你的第二个问题,销售报告本身可以有不同的格式,是的。好的,这给我带来了一些其他问题。当你说一个数据对象需要知道如何为一个特定的报表组织它的数据时,你的确切意思是什么?这与ReportGenerator将执行的操作有何不同?组织/格式化不是一回事吗?好吧,结合@Adrian Leonhard关于访问者模式的建议,我可以让各种报表生成器实现DataObjectVisitors?这有意义吗?@redeveloper如果不了解您的代码当前的结构,我将无法进一步发表评论。你能发布一些代码片段来透视问题吗?或者,如果您没有代码,您能为您提到的每个类提供一个框架吗?