我正在设计一个应用程序,我无法指出相同的正确设计。我有一个想法,但它似乎不是GOF模式的一部分,因此我不确定它是否是一个很好的方式。
我的项目从任何可能的15-20个文档创建数据(文档都是相同的类型,但数据可能有很大差异)。获得数据后,需要将其格式化为任何支持的4种格式并显示。此外,使问题复杂化,即使文档本身大致分为4-5种类型,但很少有文档(跨这些类别)以类似的方式进行格式化。
现在,我按以下方式拆分它:
数据创建创建一个具有通用接口的接口数据对象,可以处理所有这些文档。
数据显示读取数据对象并以所需方式显示。
我的第一个问题是 - 我没有在GOF模式集中看到这样的接口对象。这是一个很好的设计决定吗?
正如我之前提到的,只有两个文档的格式相似 - 跨分类。这里的问题是其他文档 - 应该以类似的方式格式化 - 不是。所以,我发现自己在获取数据时在一个场景中克隆代码,这是我不想要的。
所以,我的第二个问题是 - 处理这个问题的最佳方法是什么?
如果有人能帮助我,我将非常感激。
答案 0 :(得分:5)
请勿提前尝试推送太硬的图案。找出一些设计,然后尝试揭示模式。模式旨在进行通信,并且可以被视为仅对某些特定关注点可重用。
所以你的广泛问题是你有X文件和Y渲染。
GoF模式的粒度低于您的问题。您必须找出符合您特定要求的设计。如有疑问,请始终选择最简单 / more 直观的设计。没有一个具有最多模式和花哨的类层次结构。
我的2美分
答案 1 :(得分:1)
听起来像策略模式,整个应用程序是带有退化控制器的MVC。
答案 2 :(得分:0)
您的界面对象可以使用Facade或Adapter设计模式进行描述。如果没有与现有设计模式直接匹配,请不要太担心 - 您描述的解决方案是最好的方法。
对于第二个问题,您可以拥有一个实现所有类共有的功能的基类。然后扩展它以满足所有特殊需求。我知道书籍建议更喜欢组合而不是继承,但这不是一个严格的规则,并且有些情况下继承是一个很好的解决方案。
答案 3 :(得分:0)
您是否考虑过数据创建的构建器模式
构建器意图
将复杂对象的构造与其表示分开,以便相同的构造过程可以创建不同的表示。
对于显示器,您可以使用不同的装饰器