2014-05-22 33 views
2

싱글 톤 패턴 구현이 어떻게 작동하는지 혼란 스럽습니다. 나는 singleton의 정의는 다음과 같다 것을 알고 :싱글 톤 패턴 : 멀티 톤?

그것에 단일 액세스 지점을 제공하는 클래스는 하나의 객체를 생성 할 수 있는지 확인합니다.

그러나 싱글턴 패턴의 열거 형 버전을 사용할 때 멀티 톤은 클래스의 둘 이상의 객체를 만들 수 없습니까? 예를 들어

:

Public enum myFactory{ 

INSTANCE1, INSTANCE2; 

//methods... 

} 
+0

항상있을 것입니다 단지 1 예를 들어 제한하려면 그것을 사용하는 모든 클래스가 공유 할 것입니다 – Stultuske

+2

* 멀티 톤은 m을 허용하지 않습니다. 생성 될 클래스의 한 객체보다 광석 * 그것이 의미할만한 것이다 ;-) –

+0

싱글 톤은 (그 자체로) 클래스의 다른 인스턴스가 생성되는 것을 막지는 않으며, 단지 하나의 인스턴스 만 지정된 싱글 톤 액세스 기술을 사용하여 생성됩니다. 귀하의 (개그) "멀티 톤"에는 여러 가지 처방 된 액세스 기술이 있습니다. –

답변

2

멀티 톤 디자인 패턴

멀티 톤 디자인 패턴 싱글 패턴의 확장이다. 각 인스턴스에 대해 키를 지정하여 클래스의 제한된 수인 이 존재할 수 있으며 은 각 키에 대해 단일 오브젝트 만 작성되도록합니다.

그래서 열거는 좋은 예에게 있습니다

http://www.ritambhara.in/multiton-design-pattern/

1

싱글 톤 패턴을 사용하는 또 다른 방법은 다음과 같습니다

는 INSTANCE1의 4

package org.dixit.amit.immutable; 

import java.util.Random; 

public class ThreadSafeSingleton { 


private ThreadSafeSingleton(){ 

} 

private static ThreadSafeSingleton threadSafeSingleton[] = new ThreadSafeSingleton[3]; 
static int i = -1; 

public static ThreadSafeSingleton getInstance(){ 
    i++; 
    System.out.println("i is ---> "+i); 
    if(i<3 && threadSafeSingleton[i]==null){ 
     synchronized (ThreadSafeSingleton.class) { 
      if(threadSafeSingleton[i]==null){ 
       threadSafeSingleton[i] = new ThreadSafeSingleton(); 
       return threadSafeSingleton[i]; 
      } 
     } 

    } 

    int j = randInt(0, 4); 

    return threadSafeSingleton[j]; 

} 

private static int randInt(int min, int max) { 

    // Usually this can be a field rather than a method variable 
    Random rand = new Random(); 

    // nextInt is normally exclusive of the top value, 
    // so add 1 to make it inclusive 
    int randomNum = rand.nextInt((max - min) + 1) + min; 

    return randomNum; 
} 


}