一个设计模式问题

时间:2010-02-02 06:09:00

标签: design-patterns

我正在设计一个应用程序,我无法指出相同的正确设计。我有一个想法,但它似乎不是GOF模式的一部分,因此我不确定它是否是一个很好的方式。

我的项目从任何可能的15-20个文档创建数据(文档都是相同的类型,但数据可能有很大差异)。获得数据后,需要将其格式化为任何支持的4种格式并显示。此外,使问题复杂化,即使文档本身大致分为4-5种类型,但很少有文档(跨这些类别)以类似的方式进行格式化。

现在,我按以下方式拆分它:

  • 数据创建
  • 数据显示

数据创建创建一个具有通用接口的接口数据对象,可以处理所有这些文档。

数据显示读取数据对象并以所需方式显示。

我的第一个问题是 - 我没有在GOF模式集中看到这样的接口对象。这是一个很好的设计决定吗?

正如我之前提到的,只有两个文档的格式相似 - 跨分类。这里的问题是其他文档 - 应该以类似的方式格式化 - 不是。所以,我发现自己在获取数据时在一个场景中克隆代码,这是我不想要的。

所以,我的第二个问题是 - 处理这个问题的最佳方法是什么?

如果有人能帮助我,我将非常感激。

4 个答案:

答案 0 :(得分:5)

请勿提前尝试推送太硬的图案。找出一些设计,然后尝试揭示模式。模式旨在进行通信,并且可以被视为仅对某些特定关注点可重用。

所以你的广泛问题是你有X文件和Y渲染。

  • 尝试为有意义的文档生成类层次结构。您可以考虑基类中的某些逻辑或使用接口
  • 如果您无法找出抽象所有类型文档的界面,您可以依赖适配器来使各种文档适应给定的界面
  • 要拥有多个渲染器,您可以查看 visitor 模式, decorator 模式或策略模式,或者只使用简单的继承/多态与Y呈现,实现相同的接口。这取决于变化的性质。
  • 要根据用例获取正确的渲染器,您可以使用 factory 来嵌入决策和实例化逻辑。

GoF模式的粒度低于您的问题。您必须找出符合您特定要求的设计。如有疑问,请始终选择最简单 / more 直观的设计。没有一个具有最多模式和花哨的类层次结构。

我的2美分

答案 1 :(得分:1)

听起来像策略模式,整个应用程序是带有退化控制器的MVC。

答案 2 :(得分:0)

您的界面对象可以使用FacadeAdapter设计模式进行描述。如果没有与现有设计模式直接匹配,请不要太担心 - 您描述的解决方案是最好的方法。

对于第二个问题,您可以拥有一个实现所有类共有的功能的基类。然后扩展它以满足所有特殊需求。我知道书籍建议更喜欢组合而不是继承,但这不是一个严格的规则,并且有些情况下继承是一个很好的解决方案。

答案 3 :(得分:0)

您是否考虑过数据创建的构建器模式

构建器意图

  

将复杂对象的构造与其表示分开,以便相同的构造过程可以创建不同的表示。

对于显示器,您可以使用不同的装饰器