싱글은 다음과 같습니다 :내가 코드를 작성했습니다 인스턴스화
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;
}
}
나는 우리의 웹 사이트 모두 ko 페이지 (영어) 및 es_US (스페인어)에 대해 동일한 사이트 맵을 반환합니다. 그래서 저는 스페인어와 영어 버전 (타사 공급 업체가 영어 페이지를 스페인어로 변환 함)에 대한 미국 사이트 맵을 인스턴스화합니다. 사이트 맵을 인스턴스화하는 방법은 싱글 톤을 사용합니다. 싱글 톤 객체는 다음과 같이 생성됩니다 :
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
그게 우리가 원하는거야. 우리는 영어 템플릿 만 만들었습니다. 그러나 타사 공급 업체가 스페인어 번역을 수행하고 있으며 해당 템플릿을 코드 기반에 배포하지 않았습니다. 나는 스페인어 사이트 (나는 URL을 기반으로하고있다)를 탐지하고 스페인어에 대한 특정 사항을 차단하는 작업이 주어졌다. if/Else 로직을 기반으로 쉽게 할 수 있습니다. – pushya