构造函数最佳实践

Jav*_*per 3 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();
Run Code Online (Sandbox Code Playgroud)

小智 8

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

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


小智 5

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

尽管两者都将起作用,但前者尚不清楚。