构造函数最佳实践

时间:2013-08-05 02:16:32

标签: java software-design

假设我们有一个只有1个函数的类,例如:compute DFS。 以下哪项是首选方法?为什么?

Approach 1:

public class DFS {

    public DFS(Graph g) {
      dfs(g);  // <--- computation invoked from constructor.
    }

    private void DFS(Graph g) {
       // do dfs traversal
    }
}

Client:
DFS dfs = new DFS(graph);


Approach 2:
public class DFS {
    Graph g;
    public DFS(Graph g) {
       this.g = g
    }

    private void doDFS() {
       // do dfs traversal
    }
}

Client:
DFS dfs = new DFS(graph);
dfs.doDFS();

2 个答案:

答案 0 :(得分:7)

构造函数用于初始化对象中的数据字段。鉴于选择,第二种方法似乎更正确。

尽管可能更好的是在图形对象中包含doDFS方法。为单个简单函数创建整个类通常是不好的做法。 doDFS方法特定于它使用的图形,因此将它包含在您拥有的任何图形类中都是很自然的。

答案 1 :(得分:4)

后者。惯例是构造函数创建一个准备好工作的空白对象,而不是立即开始工作的对象。

虽然两者都有效,但前者尚不清楚。