2012-01-20 5 views
0

싱글 톤을 사용하여 공통 변수를 공유하는 방법을 이해하는 데 어려움을 겪어 왔습니다. 나는 공통 변수 인 iconCount를 공유해야하는 두 개의 진입 점이있는 블랙 베리 앱을 만들려고 노력 중이다. 포럼에서 누군가가 RunTimeStore API를 사용하여 싱글 톤을 사용하는 것이 좋습니다. 내가 구글에 깊은 몇 페이지되었지만 나는 아직도이가하는 방법을 구현하는 방법을 이해은`t싱글 톤을 사용하여 변수 공유하기

http://docs.blackberry.com/en/developers/deliverables/17952/CS_creating_a_singleton_by_using_rutnime_store_1554335_11.jsp

:에 결국 주위에 인터넷 검색 리드.

class MySingleton { 
    private static MySingleton _instance; 
    private static final long GUID = 0xab4dd61c5d004c18L; 

    // constructor 
    MySingleton() {} 

    public static MySingleton getInstance() { 
     if (_instance == null) { 
     _instance = (MySingleton)RuntimeStore.getRuntimeStore().get(GUID); 
     if (_instance == null) { 
     MySingleton singleton = new MySingleton(); 

     RuntimeStore.getRuntimeStore().put(GUID, singleton); 
     _instance = singleton; 
     } 
     } 
     return _instance; 
    } 
} 

을 그리고 난이 싱글에서 변수를 만들 얼마나 또 다른 질문은 다음과 같습니다 나의 현재 이해는 싱글 코드를 통해 어떻게 든 "전역 변수"를 만들 것입니다? 나는 처음에 변수 iconCount = 0을 선언해야하고 그것을 사용할 수 있어야합니다. 그게 뭔가라고 선언할까요?

Integer iconCount = (Integer) RuntimeStore.getInstance(); 

? 제가 Java를 시작한 이래로 이것은 매우 새로운 것입니다. 누군가가 이것을 염두에두고 설명 할 수 있다면 초보자와 의사 소통을 할 수있어서 매우 감사 할 것입니다. 미리 감사드립니다!

답변

0

사용자가 MySingleton 클래스를 한 번만 사용하면 여러 인스턴스에 문제가 발생하지 않고 같은 시간에 두 번 초기화 할 수 있습니다.여러 개의 인스턴스 뭔가에서 다음과 같은 의미 : 두 initilaization이 션 diffetent 수를 가질 수

Mysingleton single = new Mysingleton(); 
Mysingleton single2 = new Mysingleton(); 

때문입니다. 이 같은 필요

public class IconManager { 
    private static iconManager _instance; 
    private static final long GUID = 0xab4dd61c5d004c18L; 
    private static int count = 0; 

    // constructor 
    IconManager() { 
    } 

    public static IconManager getInstance() { 
     if (_instance == null) { 
      _instance = (IconManager) RuntimeStore.getRuntimeStore().get(GUID); 
      if (_instance == null) { 
       IconManager singleton = new IconManager(); 

       RuntimeStore.getRuntimeStore().put(GUID, singleton); 
       _instance = singleton; 
      } 
     } 
     return _instance; 
    } 

    public static int getCount() { 
     return count; 
    } 

    public static void setCount(int count) { 
     this.count = count; 
    } 

}

을 당신은 클래스의 인스턴스를 만들 수 있습니다 후 :

public static void main(String[] args){ 

    IconManager iconManager = IconManager.getInstance(); 
    iconManager.setCount(iconmanager.getCount() + 1); 

} 

그래서 응용 프로그램이 이미 인스턴스이있을 경우, 먼저 검증을 할 것입니다 기존의 것을 갱신하고 새로운 것을 작성하지 않을 경우.

+0

안녕하세요, 도움을 주셔서 감사합니다. – user1152440

+0

안녕하세요 도움 주셔서 감사합니다. IconManager.getRuntimeStore(). put (GUID, singleton); getRuntimeStore()가있는 IconManager의 메서드가 없기 때문에 작동하지 않는 것 같습니다. RuntimeStore.getRuntimeStore(). put (GUID, singleton)을 수행하는 경우에만 작동합니다. 지금 당장 기술을 테스트 할 것입니다. – user1152440

+0

@ user1152440 네, RuntimeStore이어야합니다. – HRgiger

1

당신은 앱에서 인스턴스를 얻을 수

MySingleton.getInstance()

을 부를 것이다. 핵심은 getInstance이 기본 객체에 대한 액세스를 제어한다는 것입니다.

또한 생성자를 비공개로 설정해야 해당 파일에서만 액세스 할 수 있습니다.

싱글 톤 클래스에서 속성을 정의하려면 비 정적 속성을 선언하기 만하면됩니다. 클래스의 각 인스턴스는 고유 한 사본을 가지지 만 객체 생성을 제어하므로 객체가 JVM 당 1 개만 있어야합니다. 그래서

class MySingleton { 
    private static MySingleton _instance; 
    private static final long GUID = 0xab4dd61c5d004c18L; 

    private Integer iconCount; // non-static method, add a public getIconCount below 
    ... 
} 

다음 당신은 정수로 MySingleton 클래스를 캐스팅 할 수

MySingleton.getInstance().getIconCount();

+0

if 문 양쪽에 인스턴스를 초기화하는 코드가 다르면 인스턴스를 인스턴스화하는 데 2 ​​가지 방법이있을 수 있습니다. 하나는 처음부터, 또 하나는 "runtimeStore"에서 가져온 것입니다. 캐시에서 싱글 톤을 얻으려고 시도하는 것처럼 보이며, 거기에 없으면 생성합니다. 이것은 "세미"유효합니다. – rfeak

+0

@rfreak, 고맙습니다, 그래도 여전히 저를 괴롭 힙니다.하지만 절대적으로 깨진 것은 아닙니다. – hvgotcodes

+0

전적으로 동의합니다. 그것은 틀린 것처럼 보인다. 블랙 베리 프로그래밍에 대한 잭도 모르겠다. 프로그래밍 환경에 특유의 뭔가 있을지도 모른다. – rfeak

0

를 통해 액세스 할 수 있습니다.

귀하의 예제에서 당신은 싱글 톤을 사용하지 않고 RuntimeStore를 사용합니다!

당신은 싱글 (개인 생성자)의 생성자 0으로 initalized 클래스 싱글의 정수 필드를 사용하여 수행하여 얻을 수

: 여기

MySingleton.getInstance().getIntegerField() 

는 싱글 톤 패턴의 자세한 것을 설명입니다 : http://en.wikipedia.org/wiki/Singleton_pattern

나는 당신이 싱글 톤의 사용을 오해한다고 생각합니다. 싱글 톤은 RuntimeStore에 삽입되지 않는다. 이것은 클래식 자바 객체이다. 싱글 톤에 대해 아는 유일한 subtile은 생성자가 비공개이며 MySingleton 클래스는 singleton.getInstance()가 호출 될 때 항상 반환되는 인스턴스를 하나만 가질 수 있다는 것입니다.

관련 문제