刚开始学习模式。这是一个简单的问题。
我有一个包含Report
的{{1}}对象,每个对象包含各种Page
s ReportElement
,Table
,Paragraph
) 等等。假设我想创建一个基础结构,用于获取Image
并吐出此Report
的各种表示形式,例如RTF格式的文档,TeX格式的文档,HTML文档等。
我在这里寻找哪种设计模式?
答案 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所说)将报表对象转换为特定的具体表示。