2013-08-05 101 views
2

假設我們有一個只有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(); 
+1

結果將如何傳遞給調用者?遍歷是否有副作用? – Thilo

回答

3

後者。約定是構造函數創建一個準備好工作的空白對象,而不是立即開始工作的對象。

雖然兩者都會起作用,但前者尚不清楚。

7

構造函數用於初始化對象中的數據字段。鑑於這些選擇,第二種方法似乎更加正確。

雖然可能更好的是在您的圖形對象中包含doDFS方法。爲單個簡單函數創建整個類通常是不好的做法。 doDFS方法特定於它所使用的圖形,因此將它包含在您擁有的任何圖類中是很自然的。

+0

我也選擇第二個,就好像你稍後使用IOC和依賴注入一樣,該模式將像第二個一樣。 –