我将一个应用程序作为一个业余爱好项目。它是用 Java 编写的,是计算水肺潜水减压方案的系统的一部分。
我的问题是在存储我的潜水计划的类(class)中,这不是真正的问题,因为它工作正常,但我觉得它可以设计得更好,所以我想征求一些反馈意见。

我现在得到的是以下内容。

一个 DivePlan 类,它具有 DiveOpperations 的 ArrayList ( ArrayList<DiveOpperation> )。DivePlan 类有 3 个函数。一个计划下降,一个计划上升,一个计划在相同深度的平坦潜水。所有这些函数都会向 ArrayList 添加一个 DiveOpperation 对象。然而,上升和下降还有一些其他属性作为保持相同深度的潜水。例如上升/下降的速度(以米/秒为单位)。我现在将它设置为 0 速度以进行平底潜水,但这感觉不对。我知道我应该创建扩展 DiveOpperation 的单独类,但是这样当我从数组中取出它时我不知道它是 ascentdescent 还是 flatdive 类。

这种功能的好设计是什么?

最佳答案

verticalSpeed 变量决定怎么样?
0 的值为 DiveOperation 代表平底潜水,正值或负值分别代表上升或下降?

如果除了上升/下降速度之外还有其他属性,您可能希望将 DiveOperation 变成一个抽象类,并创建三个子类 AscentOperationDescentOperationFlatDiveOperation 。但是,如果我对您的理解正确,那么您会遇到例如迭代的问题,因为您不知道 DiveOperation 的实际类型。这可以通过使用大量 instanceof 检查(丑陋!)或使用 visitor pattern(更好的 imo)来解决。在这种情况下,您可能会使用 DecompressionCalculatorVisitor 之类的东西依次访问每个 DiveOperation

有关访问者模式的详细示例,请查看我的回答 over here

10-07 15:33