我对单例模式的multiton实现如何工作感到困惑。 我知道singleton的定义如下:
确保一个类只允许创建一个对象,提供单点访问。
但是,当使用单例模式的枚举版本时,多重数据是否不允许创建该类的多个对象?
例如:
Public enum myFactory{
INSTANCE1, INSTANCE2;
//methods...
}
答案 0 :(得分:2)
多声道设计模式
Multiton设计模式是。的扩展 单身模式。它确保了有限数量的实例 通过为每个实例指定一个键,可以存在一个类 只允许为每个键创建一个对象。
所以Enum是最好的例子
答案 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;
}
}