2010-08-13 52 views
0

我有一個部門類。我想創建一個值爲HR的實例部門和一個值爲Admin的部門實例,當我的應用程序加載時(控制檯應用程序),然後我想要在我的程序中使用這些實例。我可以在不同的類中使用相同的實例嗎?例如,我從csv文件讀取一個員工,然後創建一個員工對象。現在創建一個員工對象,我必須使用部門對象。必須根據從文件中讀取的部門值設置適當的部門值。如何執行如何在整個應用程序中使用對象的一個​​實例

回答

2

您正在尋找單例模式的實例,您可以通過聲明構造函數爲private並保留靜態引用變量在getter中初始化。喜歡的東西:

private static Department hr = null; 

private Department() { 
} 

public static synchronized Department getHRInstance() { 
    if (null == hr) { 
     hr = new Department(); 
    } 
    return hr; 
} 

從您的代碼的其餘部分,你可以撥打Department.getHRDepartment(),同樣的管理部門,它只是映射到第二靜態變量。 (對於超過2個單例,您可能想要使用映射來存儲實例或使用Enum類來定義單例。)

單例實例具有依賴注入難以完成的缺點,使得構建JUnit測試困難或不可能。對於大多數單例模式,實際上最好是初始化「單例」實例,同時初始化應用程序並通過傳遞它們通過構造函數傳遞給它們的類,或者創建一個在創建對象之後傳遞單例引用的對象工廠實例。

+0

+1意味着缺點非常清晰。優秀的答案。 (Static)Singletons ** s * * * * k **這麼多。 – whiskeysierra 2010-08-13 22:36:01

1

你需要一個Singleton。有幾種方法可以實現它,這是rsp發佈的最廣爲人知的解決方案。一個很好的竅門是隻有一個值的枚舉。

相關問題