Java 单态模式:多态?
我对单例模式的实现是如何工作的感到困惑。 我知道a的定义如下: 确保一个类只允许创建一个对象,提供对它的单点访问 但是,当使用单例模式的枚举版本时,multiton是否允许创建多个类的对象 例如:Java 单态模式:多态?,java,design-patterns,singleton,multiton,Java,Design Patterns,Singleton,Multiton,我对单例模式的实现是如何工作的感到困惑。 我知道a的定义如下: 确保一个类只允许创建一个对象,提供对它的单点访问 但是,当使用单例模式的枚举版本时,multiton是否允许创建多个类的对象 例如: Public enum myFactory{ INSTANCE1, INSTANCE2; //methods... } 多通设计模式 Multiton设计模式是 单一模式。它确保了有限数量的实例 通过为每个实例指定一个键和 只允许为每个关键点创建单个对象 所以Enum就是最好的例子 多通设计
Public enum myFactory{
INSTANCE1, INSTANCE2;
//methods...
}
多通设计模式
Multiton设计模式是
单一模式。它确保了有限数量的实例
通过为每个实例指定一个键和
只允许为每个关键点创建单个对象
所以Enum就是最好的例子
多通设计模式
Multiton设计模式是
单一模式。它确保了有限数量的实例
通过为每个实例指定一个键和
只允许为每个关键点创建单个对象
所以Enum就是最好的例子
使用单例模式的另一种方法是: 限制为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;
}
}
package org.dixit.amit.immutable;
导入java.util.Random;
公共类线程安全单例{
私有线程安全单例(){
}
私有静态ThreadSafeSingleton ThreadSafeSingleton[]=新ThreadSafeSingleton[3];
静态int i=-1;
公共静态线程安全Singleton getInstance(){
i++;
System.out.println(“i是-->”+i);
如果(i使用单例模式的另一种方法是:
限制为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;
}
}
package org.dixit.amit.immutable;
导入java.util.Random;
公共类线程安全单例{
私有线程安全单例(){
}
私有静态ThreadSafeSingleton ThreadSafeSingleton[]=新ThreadSafeSingleton[3];
静态int i=-1;
公共静态线程安全Singleton getInstance(){
i++;
System.out.println(“i是-->”+i);
如果(I总是只有INSTANCE1的一个实例,每个使用它的类都会共享它,multiton是否允许创建多个类的对象,这就是问题所在;-)singleton不会(自身)防止创建该类的其他实例,只需确保使用指定的单例访问技术创建一个且只有一个实例具有多个指定的访问技术。从您链接的Wikipedia文章中可以看出:而不是每个应用程序都有一个实例,multiton模式可以确保每个键都有一个实例。
这正是使用具有多个值的枚举所能实现的。如果您愿意,可以使用枚举名称作为键,并使用Static方法来检索实例。INSTANCE1的实例总是只有一个,每个使用它的类都将共享它。multiton不允许创建多个类对象吗?这就是问题所在;-)singleton不允许(单独)防止创建该类的其他实例,只需确保使用指定的单例访问技术创建一个且只有一个实例具有多个指定的访问技术。从您链接的Wikipedia文章中可以看出:而不是每个应用程序都有一个实例,multiton模式可以确保每个键都有一个实例。
这正是使用具有多个值的枚举所能实现的。如果您愿意,可以使用枚举名称作为键,并使用方法来检索实例。