2011-04-10 38 views
0

我想創建一個類以及該類中與數據庫交互的一些方法。 許多其他類應調用該方法。java數據庫中靜態方法和單例的替代解決方案

Q1:是否可以爲其他人創建該類的一個實例?

問題2:我可以給靜態方法嗎?

問題3:對於java數據庫,是否有任何替代靜態和單例的解決方案?

回答

1

我還沒有在Java中使用單例。不過,關於這個主題還有一個相當不錯的討論http://c2.com/cgi/wiki?JavaSingleton

基本上,你將使你的構造函數與一個私有的靜態最終實例變量一起私有。然後,您將需要一個返回您的實例的公共靜態getInstance方法。如果你需要線程安全,它會變得更復雜一點,所以請閱讀鏈接的文章。

+0

請修正網址。尾隨點。 – 2011-04-10 18:30:54

1

你也可以使用一個枚舉的單變量INSTANCE象下面這樣:

public enum EmployeeDAO { 
INSTANCE; 

static{ 
    //Initialize connection info etc. 
    init(); 
} 

private EmployeeDAO(){ 
    //Constructor stuff 
} 

public Employee getEmployeesById(int id){ 
      //Replace this with your data retrieval logic 
    return null; 
} 

public Employee getDeadBeatEmployees(){ 
      //Replace this with your data retrieval logic 
    return null; 
} 

public Employee getAllStars(){ 
      //Replace this with your data retrieval logic 
    return null; 
} 

public static void init(){ 

} 

}

public class Employee{} 

public class SillyCanuck{ 
    public static void main(String args[]){ 

    EmployeeDAO.INSTANCE.getEmployeeById(5); 
} 

} 
+1

你能詳細說明嗎?這絕對編譯。 INSTANCE是枚舉的單例,並且永遠不會從這個類中引用。這裏沒有任何竅門。它與在普通的java類中聲明一個'靜態最終實例'沒有什麼不同,只是它有編譯時間保證永遠不會有多個實例。此外,這個例子與序列化無關。 – nsfyn55 2011-04-10 19:50:13

+0

同意。這是定義一個單身人士的有趣方式。它對序列化有好處(傳統的單例可能在反序列化後以多個實例結束)。我唯一不喜歡的是static {} block:它使測試變得很痛苦;單身雖然總是一個痛苦的考驗。 – 2011-04-11 15:45:31

+1

你可以看看關於單例模式的維基百科文章,並參考「Enum-way」部分,然後重新考慮你的-1 - http://en.wikipedia.org/wiki/Singleton_pattern#The_Enum-way。我不認爲我在傳播錯誤信息,只是提供一種替代實施策略。 DeeP應該考慮他的情況並選擇最佳解決方案。 – nsfyn55 2011-04-11 18:04:04