2012-02-05 108 views
0

我正在做一个关于图论的项目,并正在实现一些图算法。OOP设计问题

我想单独

  • 算法的代码(如BFS,DFS ...),
  • 图形处理代码(如图形类本身,边和顶点handling..etc ),以及
  • 图形用户界面相关的代码

我有2个与应用程序相关的设计问题:

  1. 我应该为每个包使用一个单独的包吗?而且,任何人都可以添加关于连接和制作这些部分的合作,这将会很有帮助。

  2. 什么设计模式应该用于算法代码?它应该是静态类,单例还是其他建议?

回答

2

没有普遍的答案。这个决定取决于你是否以及如何计划重用你正在开发的系统。

如您所述,使用众所周知的设计模式是一个好主意。我不知道你的架构目标,但我可以推荐以下一般指导原则:

在其自己的包中设计“模型”(数据结构)。这个图层应该只包含系统的“模型”和“状态”表示:图形,顶点,方向,权重等。该图层最有可能还应该包含模型维护逻辑(向图中添加一个节点,获取节点,获取顶点,创建顶点,增加重量等)看看结构模式(复合材料,外观等),看看它们中的任何一个是否可以应用到你的模型。

在单独的层中实现算法。大多数情况下,使这些组件成为“无状态”是一个好主意(在模型上执行操作的静态函数)。看看行为模式(访问者,责任链,迭代器,解释器,命令等),看看是否可以应用它们。

使用观察者设计模式来设计“渲染”(显示,可视化)图层。此模式允许您将观察到的(模型)和视图分离,并最终为相同模型提供几种类型的视图。

正如我所说,没有一般的解决方案。这些只是一些想法,旨在实现分离且易于维护和可重用的软件。