我正试图解决3D空间中的路径规划问题,并取得了成功,但我不知道我的解决方案是否有足够的松耦合。我有三个源文件,每个都包含一个公共类: Vertex.java、VertexHeuristicComparator.java和PathPlanningUtil.java。
顶点包含三个字段:三维空间中的Point
(location
)、对另一个顶点的引用(parent
)和保持目标顶点(distToGoal
)距离的float
。在路径规划中使用一个顶点集合来探索环境并找到最佳路径。
VertexHeuristicComparator实现了Comparator<Vertex>
。我已经超越了compareTo方法,在比较中使用了distToGoal
和parent
。该方法有效地定义了什么是最佳顶点,以便路径规划能够对搜索进行优先排序。
PathPlanningUtil包含planPath(Point start, Point goal)
方法。此方法返回表示从开始到目标的3D空间中的路径的ArrayList<Vertex>
。该方法使用VertexHeuristicComparator
来确定如何通过探索VertexHeuristicComparator确定的“最低”顶点来探索环境。
因为VertexHeuristicComparator
是路径规划逻辑的核心。更改VertexHeuristicComparator源代码将导致planPath
返回不同的路径。对VertexHeuristicComparator的更改会不会严重地改变planPath
的输出?
发布于 2015-08-21 02:01:55
我对耦合的一般理解是,它更多的是不依赖于特定的实现,而不是一般的接口--例如,显式地返回或要求一个ArrayList而不是一个列表,或者对特定事物的使用进行硬编码,使其在逻辑链中深入。
对于您的特定示例,我可能建议的是让您的路径规划接受启发式使用的参数(作为比较器)。这将阻止您实现路径规划,具体取决于您为比较器编写的类,并允许客户端(在本例中为您的主程序)提供它希望用作启发式的比较策略。
因此,为了在代码示例中总结这一点,我将使路径规划方法具有一个签名,类似于:
List<Vertex> planPath(Point start, Point goal, Comparator<Vertex> heuristic)
并让调用计划路径的方法成为引用您的VertexHeuristicComparator类的方法,使用它作为启发式参数。
https://stackoverflow.com/questions/32130932
复制相似问题