Java 这是坏耦合吗?

Java 这是坏耦合吗?,java,Java,我试图在3D空间中解决一个路径规划问题,并取得了成功,但我不知道我的解决方案是否有足够的松耦合。我有三个源文件,每个都包含一个公共类:Vertex.java、vertexhuristiccomparator.java和PathPlanningUtil.java 顶点包含三个字段:三维空间中的点(位置),对另一个顶点的引用(父顶点)和保持到目标顶点距离的浮点(远距)。路径规划中使用顶点集合来探索环境并找到最佳路径 VertexEuristicComparator实现比较器。我已经重写了compar

我试图在3D空间中解决一个路径规划问题,并取得了成功,但我不知道我的解决方案是否有足够的松耦合。我有三个源文件,每个都包含一个公共类:Vertex.java、vertexhuristiccomparator.java和PathPlanningUtil.java

顶点包含三个字段:三维空间中的
点(
位置
),对另一个顶点的引用(
父顶点
)和保持到目标顶点距离的
浮点(
远距
)。路径规划中使用顶点集合来探索环境并找到最佳路径

VertexEuristicComparator实现
比较器
。我已经重写了compareTo方法,在比较中使用
disttogal
parent
。该方法有效地定义了最佳顶点,以便路径规划能够优先搜索

PathPlanningUtil包含方法
planPath(点开始,点目标)
。此方法返回一个
ArrayList
,表示从起点到目标的三维空间中的路径。此方法使用
VertexHeuristicComparator
通过探索VertexHeuristicComparator确定为“最低”顶点的顶点来确定如何探索环境


因为
vertexhuristiccomparator
是路径规划逻辑的核心。更改VertexEuristicComparator源代码将导致
planPath
返回不同的路径。对VertexHuristicComparator的更改是否会导致严重更改
planPath的输出?

我对耦合的一般理解是,它更多的是不依赖于特定实现而不是通用接口-例如,显式返回或需要ArrayList而不是列表,或者硬编码,将特定事物的使用置于逻辑链的最底层

对于您的特定示例,我可能建议让您的路径规划接受启发式作为参数使用(作为比较)。这将防止路径规划的实现具体依赖于为comparator编写的类,并允许客户端(在本例中是您的主程序)提供希望用作启发式的比较策略

因此,为了在代码示例中总结这一点,我将使路径规划方法具有如下特征:

列出平面路径(点开始、点目标、比较启发式)


并让调用plan path的方法引用VertexHuristicComparator类,将其用作启发式参数

要回答您的直接问题

对VertexHuristicComparator的更改与 彻底改变planPath的输出


否。只有当对
VertexHuristicComparator
的更改导致对
PathPlanningUtil
代码的更改时,才会出现不良(紧密)耦合。只要您可以在不必更改另一个类的代码的情况下更改一个类的代码,您就已经实现了合理的松耦合。

有什么原因不能使用(如果需要)在不同的
比较器中交换吗?