我对单例模式的多例实现如何工作感到困惑。我知道单例的定义如下:
确保一个类只允许创建一个对象,提供对它的单点访问。
但是,当使用单例模式的枚举版本时,多例不允许创建多个类的对象吗?
例如:
Public enum myFactory{
INSTANCE1, INSTANCE2;
//methods...
}
多吨设计模式
Multiton 设计模式是单例模式的扩展。它通过为每个实例指定一个键并只允许为每个键创建一个对象来确保可以存在有限数量的类实例。
所以枚举是最好的例子
使用单例模式的另一种方法是:
限制为 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;
}
}