构造函数最佳实践

6
假设我们有一个只有一个函数的类,例如:计算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();

1
结果将如何传递给调用者?遍历是否具有副作用? - Thilo
2个回答

9
构造函数的作用是初始化对象中的数据字段。在这些选择中,第二种方法似乎更正确。
虽然更好的做法可能是将doDFS方法包含在图形对象中。为单个简单函数创建一个完整的类通常是不好的实践。doDFS方法是特定于其所使用的图形的,因此将其包含在您拥有的任何图形类中是自然的。

我也选择第二个,因为如果您稍后使用IOC和依赖注入,模式将类似于第二个。 - Harris Yer

7
后者是惯例。构造函数创建的是一个空对象,准备好进行工作,而不是立即开始工作的对象。
虽然两种方法都可以运行,但前者不够清晰明了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接