如果我想在图表上执行DFS,
选项1: 我可以使用方法dfs()
创建一个类GraphOR
方案2: 我可以创建一个2类Graph和DFS,并在DFS的构造函数中传递Graph对象。
一般来说,何时使用实例方法以及何时选择将实例传递给另一个类的构造函数?有没有经验法则?
答案 0 :(得分:3)
我会使用单独的类,将 图表的关注点与导航图表分开。
为图形节点创建一个界面,例如
interface Node<T> {
T getValue();
Set<Node<T>> getChildren();
}
创建一个导航和搜索图形的界面:
interface GraphSearcher<T> {
Node<T> search(Node<T> root, T value();
}
然后创建DFS实现:
class DfsGraphSearcher<T> {
Node<T> search(Node<T> root, T value) {
// DFS impl
}
}
进一步将责任与实现分开将允许您在不更改任何客户端代码的情况下交换另一个(例如广度优先)impl,可能使用抽象工厂。
答案 1 :(得分:0)
如果你创建了2个类并将Graph对象传递给DFS类的方法进行搜索,那将会很好看。