我的一般问题是何时将争论传递给构造函数,何时将争论传递给类的方法。一般来说,对象是“数据”+“作用于数据的方法”。
我有几个选择来设计一个名为 DFS 的类。以下哪个示例套件定义最好?
选项1:在构造函数中传递图形,在函数中传递源。Adv:相同的 DFS 对象将被不同的源重用。
public class DFS {
Graph g;
public DFS(Graph g) {
this.g = g;
}
public void doDfs(int source) {
// dfs computation
}
}
选项 2:具有 2 个参数且没有多态性的构造函数 缺点:对于每个新源,都需要构造新对象。
public class DFS {
Graph g;
int source;
public DFS(Graph g, int source) {
this.g = g;
this.source = source;
}
public void doDfs() {
// dfs computation
}
}
选项 3:重载构造函数 Adv:解决我们所有的用例。Dis:多态性是昂贵的。
public class DFS {
Graph g;
int source;
public DFS(Graph g) {
this.g = g;
}
public DFS(Graph g, int source) {
this.g = g;
this.source = source;
}
public void doDfs() {
doDfs(source);
}
public void doDfs(int source) {
// dfs computation
}
}
选项 4:没有构造函数
public class DFS {
DFS() { }
public void doDFS(Graph g, int source) {
this.g = g;
this.source = source;
// dfs computation
}
}