我的一般问题是何时将争论传递给构造函数,何时将争论传递给类的方法。一般来说,对象是“数据”+“作用于数据的方法”。
我有几个选择来设计一个名为 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
    }
 }