Singleton模式:Multiton?

时间:2014-05-22 11:25:13

标签: java design-patterns singleton multiton

我对单例模式的multiton实现如何工作感到困惑。 我知道singleton的定义如下:

  

确保一个类只允许创建一个对象,提供单点访问。

但是,当使用单例模式的枚举版本时,多重数据是否不允许创建该类的多个对象?

例如:

Public enum myFactory{

INSTANCE1, INSTANCE2;

//methods...

}

2 个答案:

答案 0 :(得分:2)

  

多声道设计模式

     

Multiton设计模式是。的扩展   单身模式。它确保了有限数量的实例   通过为每个实例指定一个键,可以存在一个类   只允许为每个键创建一个对象。

所以Enum是最好的例子

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

答案 1 :(得分:1)

使用Singleton模式的另一种方法是:

限制为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;
}


}
相关问题