我将一个应用程序作为一个业余爱好项目。它是用 Java 编写的,是计算水肺潜水减压方案的系统的一部分。
我的问题是在存储我的潜水计划的类(class)中,这不是真正的问题,因为它工作正常,但我觉得它可以设计得更好,所以我想征求一些反馈意见。
我现在得到的是以下内容。
一个 DivePlan
类,它具有 DiveOpperations 的 ArrayList ( ArrayList<DiveOpperation>
)。DivePlan
类有 3 个函数。一个计划下降,一个计划上升,一个计划在相同深度的平坦潜水。所有这些函数都会向 ArrayList 添加一个 DiveOpperation
对象。然而,上升和下降还有一些其他属性作为保持相同深度的潜水。例如上升/下降的速度(以米/秒为单位)。我现在将它设置为 0 速度以进行平底潜水,但这感觉不对。我知道我应该创建扩展 DiveOpperation
的单独类,但是这样当我从数组中取出它时我不知道它是 ascent
、 descent
还是 flatdive
类。
这种功能的好设计是什么?
最佳答案
让 verticalSpeed
变量决定怎么样?0
的值为 DiveOperation
代表平底潜水,正值或负值分别代表上升或下降?
如果除了上升/下降速度之外还有其他属性,您可能希望将 DiveOperation
变成一个抽象类,并创建三个子类 AscentOperation
、 DescentOperation
和 FlatDiveOperation
。但是,如果我对您的理解正确,那么您会遇到例如迭代的问题,因为您不知道 DiveOperation
的实际类型。这可以通过使用大量 instanceof
检查(丑陋!)或使用 visitor pattern(更好的 imo)来解决。在这种情况下,您可能会使用 DecompressionCalculatorVisitor
之类的东西依次访问每个 DiveOperation
。
有关访问者模式的详细示例,请查看我的回答 over here。