<分区>
如果我想在图上做一个DFS,
选项 1: 我可以使用方法 dfs() 创建一个类 Graph
或
选项 2: 我可以创建 2 个类 Graph 和 DFS,并在 DFS 的构造函数中传递 Graph 对象。
一般来说,什么时候使用实例方法,什么时候选择将实例传递给另一个类的构造函数?有什么经验法则吗?
标签 java oop constructor
<分区>
如果我想在图上做一个DFS,
选项 1: 我可以使用方法 dfs() 创建一个类 Graph
或
选项 2: 我可以创建 2 个类 Graph 和 DFS,并在 DFS 的构造函数中传递 Graph 对象。
一般来说,什么时候使用实例方法,什么时候选择将实例传递给另一个类的构造函数?有什么经验法则吗?
最佳答案
我会使用单独的类,将成为图表的关注点与导航图表的关注点分开。
为图节点创建接口(interface),eg
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,也许使用抽象工厂。
关于java - 何时创建使用实例方法与何时传递对象引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19151274/