我应该使用什么模式将报表处理到基础架构中以允许各种表示?

时间:2009-05-05 14:56:23

标签: design-patterns

刚开始学习模式。这是一个简单的问题。

我有一个包含Report的{​​{1}}对象,每个对象包含各种Page s ReportElementTableParagraph ) 等等。假设我想创建一个基础结构,用于获取Image并吐出此Report的各种表示形式,例如RTF格式的文档,TeX格式的文档,HTML文档等。

我在这里寻找哪种设计模式?

4 个答案:

答案 0 :(得分:10)

Strategy我相信。

您可以创建一个RTFReportGenerator,一个HtmlReportGenerator等...它们都实现相同的'IReportGenerator'接口,但每个具体的类以不同的方式实现'WriteReport(Report r)'方法。

答案 1 :(得分:1)

对于一组有组织的对象,Visitor模式也适用。通过遍历对象结构可以更好地处理,根据您的需要,您可以将其用于需要作为一个组处理报告的其他任务。

答案 2 :(得分:0)

不要搜索具体图案。许多模式具有相同的结构但目标不同。无论如何,你总是需要对模式进行一些更改才能在具体情况下使用它。 学习模式后,您将能够正确地思考对象及其关系。

您可以使用不同表示的策略,您可以使用构建器来创建报告。

你也可以使用更简单的东西。像委托和继承的组合(对我来说,这是你的问题的最佳解决方案)。只需创建表达式的ierarchy(BasicView< | - RTFView,TextView ...)并将Report传递给BasicView构造函数。让不同的视图提供原始报告的不同数据转换。

答案 3 :(得分:0)

我可能会使用Composite模式来表示报表元素的树,而Visitor(如Harald所说)将报表对象转换为特定的具体表示。