私の一般的な質問は、引数をいつコンストラクターに渡すか、いつ引数をクラスのメソッドに渡すかです。一般に、オブジェクトは「データ」+「データに作用するメソッド」です。
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
}
}