创建单例类Java的2个实例

时间:2017-03-28 19:14:22

标签: java singleton

我知道这个问题很奇怪,但只是想知道:有没有办法在Java中创建Singleton类的多个实例?

我的情况是这样的:

我有一个Singleton类,我需要有2个该类的对象/实例。有没有办法修改类才能创建多个实例?

我的课程:

public class SingletonClass {

    private static SingletonClass sSoleInstance;

    //private constructor.
    private SingletonClass(){

        //Prevent form the reflection api.
        if (sSoleInstance != null){
            throw new RuntimeException("Use getInstance() method to get the single instance of this class.");
        }
    } 

    public static SingletonClass getInstance(){
        if (sSoleInstance == null){ //if there is no instance available... create new one
            sSoleInstance = new SingletonClass();
        }

        return sSoleInstance;
    }
}

2 个答案:

答案 0 :(得分:2)

可以使用枚举模式创建单例;像

public enum Whatever { 
  INSTANCE;
}

将其变成双单身人士就像:

public enum Whatever { 
  INSTANCE, YETANOTHER
}

为了记录:我刚刚编写了单词" bi-singleton&#34 ;;简单地说,从概念的角度来看,这几乎是有意义的。如果您需要多个实例,则它不是单例;期。所以你的问题听起来更像XY问题。

只需注意:考虑使用该枚举解决方案;因为它默认是线程安全的;您使用的代码不是。但在进行更改之前,请先进行一些研究,以了解这些方法的优缺点。

答案 1 :(得分:0)

具有有效用例的绝对有效的问题 - 简而言之,在使用静态工厂方法时,您可以拥有具有私有构造函数的类的多个实例。您可以通过将构造函数设置为私有来确保您的类无法从外部世界实例化,但同时该类可以根据需要多次实例化自己。

检查this article以获取详细信息和代码示例。 希望有所帮助。