我想創建一個類以及該類中與數據庫交互的一些方法。 許多其他類應調用該方法。java數據庫中靜態方法和單例的替代解決方案
Q1:是否可以爲其他人創建該類的一個實例?
問題2:我可以給靜態方法嗎?
問題3:對於java數據庫,是否有任何替代靜態和單例的解決方案?
我想創建一個類以及該類中與數據庫交互的一些方法。 許多其他類應調用該方法。java數據庫中靜態方法和單例的替代解決方案
Q1:是否可以爲其他人創建該類的一個實例?
問題2:我可以給靜態方法嗎?
問題3:對於java數據庫,是否有任何替代靜態和單例的解決方案?
我還沒有在Java中使用單例。不過,關於這個主題還有一個相當不錯的討論http://c2.com/cgi/wiki?JavaSingleton
基本上,你將使你的構造函數與一個私有的靜態最終實例變量一起私有。然後,您將需要一個返回您的實例的公共靜態getInstance方法。如果你需要線程安全,它會變得更復雜一點,所以請閱讀鏈接的文章。
你也可以使用一個枚舉的單變量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);
}
}
你能詳細說明嗎?這絕對編譯。 INSTANCE是枚舉的單例,並且永遠不會從這個類中引用。這裏沒有任何竅門。它與在普通的java類中聲明一個'靜態最終實例'沒有什麼不同,只是它有編譯時間保證永遠不會有多個實例。此外,這個例子與序列化無關。 – nsfyn55 2011-04-10 19:50:13
同意。這是定義一個單身人士的有趣方式。它對序列化有好處(傳統的單例可能在反序列化後以多個實例結束)。我唯一不喜歡的是static {} block:它使測試變得很痛苦;單身雖然總是一個痛苦的考驗。 – 2011-04-11 15:45:31
你可以看看關於單例模式的維基百科文章,並參考「Enum-way」部分,然後重新考慮你的-1 - http://en.wikipedia.org/wiki/Singleton_pattern#The_Enum-way。我不認爲我在傳播錯誤信息,只是提供一種替代實施策略。 DeeP應該考慮他的情況並選擇最佳解決方案。 – nsfyn55 2011-04-11 18:04:04
請修正網址。尾隨點。 – 2011-04-10 18:30:54