我寫的代碼如下所示:辛格爾頓實例
public class SiteMapFactory {
public static ISiteMap getSiteMap(Locale loc) {
ISiteMap returnMap = null;
if (loc.equals(Locale.US)) {
returnMap = SiteMap_en_US.getInstance();
}
if(loc.equals(new Locale("es","US"))){
returnMap = SiteMap_en_US.getInstance();
}
if(loc.equals(Locale.CANADA)){
returnMap = SiteMap_fr_CA.getInstance();
}
return returnMap;
}
}
我想回到同一個站點地圖爲我們的網站的兩個EN_US(英文)和es_US(西班牙)。因此,我正在實例化西班牙文和英文版的美國站點地圖(第三方供應商正在將我們的英文頁面轉換爲西班牙文)。網站地圖實例化的方式是使用單身人士。 Singleton對象創建如下:
public class SiteMap_en_US extends SiteMapTree {
private static SiteMap_en_US m_instance;
private SiteMap_en_US() {}
static {
m_instance = new SiteMap_en_US();
m_instance.init();
}
public static SiteMap_en_US getInstance(){
return m_instance;
}
@Override
protected void init() {
//some code
}
}
我的問題是:我可以重複使用相同的單例對象兩次嗎?這是一個實例化單例對象的有效方法嗎?
您並未創建兩個實例,但爲兩個語言環境返回相同的實例。因此,在一個語言環境中所做的更改會反映在其他語言環境中使用的對象中,這些問題將會出現問題。 – JProgrammer 2012-07-30 17:55:50
這就是我們想要的。因爲我們只創建了英文模板。但是第三方供應商正在做西班牙語翻譯,並且我們沒有在我們的代碼庫中部署任何這些模板。我被給了一個任務來檢測西班牙語網站(我正在根據URL進行)並阻止某些西班牙語的事情。我可以很容易地做到這一點基於if/else邏輯 – pushya 2012-07-30 18:00:49