2015-08-21 39 views
2

我試圖解決3D空間中的路徑規劃問題並取得了成功,但我不知道我的解決方案是否有足夠的鬆散耦合。我有三個源文件,每個文件都包含一個公共類:Vertex.java,VertexHeuristicComparator.java和PathPlanningUtil.java。這是不是偶合?

頂點包含三個字段:在3D空間中的Pointlocation),到另一個頂點(parent)的引用和float保持的距離的目標頂點(distToGoal)。在路徑規劃中使用頂點集合來探索環境並找到最佳路徑。

VertexHeuristicComparator執行Comparator<Vertex>。在比較中,我重寫了compareTo方法以使用distToGoalparent。該方法有效地定義了最佳頂點,以便路徑規劃可以優先搜索。

PathPlanningUtil包含方法planPath(Point start, Point goal)。此方法返回代表從開始到目標的3D空間中的路徑的ArrayList<Vertex>。此方法使用VertexHeuristicComparator來確定探索環境的方式,方法是探索VertexHeuristicComparator確定爲「最低」頂點的頂點。

由於VertexHeuristicComparator是路徑規劃邏輯的核心。更改VertexHeuristicComparator源代碼將導致planPath返回不同的路徑。對VertexHeuristicComparator進行更改以徹底更改planPath的輸出是否會造成不良耦合?

+0

有沒有理由不能使用[策略模式](https://en.wikipedia。org/wiki/Strategy_pattern)(如果需要)在不同的'Comparator'中交換? –

回答

1

要回答你直接問,

是它改變VertexHeuristicComparator到 徹底改變planPath的輸出耦合不好?

號那隻如果更改VertexHeuristicComparator造成更改PathPlanningUtil代碼壞(緊)耦合。只要您可以更改一個類的代碼而無需更改另一個類的代碼,就可以實現相當鬆散的耦合。

0

我對耦合的一般理解是,它更多的是不依賴於具體的實現而不是通用的接口 - 例如,顯式返回或需要ArrayList而不是List,或者將特定事物的使用硬編碼到遠處在邏輯鏈中。

我可能會建議您的特定示例是讓您的路徑規劃接受作爲參數啓發式使用(作爲比較)。這將阻止你實現路徑規劃,具體取決於你爲比較器編寫的類,並允許客戶端(在這種情況下,你的主程序)提供它想用作啓發式的比較策略。

所以,在一個代碼示例總結這件事,我會做路徑規劃方法也有類似的特徵:

List<Vertex> planPath(Point start, Point goal, Comparator<Vertex> heuristic)

,並有方法調用計劃路徑是一個引用您的VertexHeuristicComparator類,將其用作啓發式參數。