2017-03-28 36 views
0

私はこの質問が奇妙だと思っていますが、ちょうど不思議です.JavaでSingletonクラスのインスタンスを複数作成する方法はありますか?シングルトンクラスの2つのインスタンスを作成するJava

私の状況はこのようなものです:

私はシングルトンクラスを持っていると私は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; 
    } 
} 
+4

* 2つのインスタンスを作成したい場合は、それはシングルトンではありません。あなたが2つのインスタンスを作成する場合、それはひどく実装されたシングルトンです(このコードがあります)。 –

+0

また、このコードを複数のスレッドから呼び出すこともできます。いくつかの呼び出しでは、2つのオブジェクトで終了する可能性があります。 http://stackoverflow.com/questions/70689/what-is-an-efficient-way-to-implement-a-singleton-pattern-in-javaを参照してください。それにもかかわらず、あなたは*なぜ*シングルトンと呼ばれるこの2つのインスタンスが必要なのか拡張できますか? –

+0

'getInstance()'メソッドから返すインスタンスをどのように決めるのですか?あなたは 'getInstance1()'と 'getInstance2()'を持っていますか?それでは、あなたは何を呼びますか? –

答えて

1

一つは、シングルトンを作成するために列挙パターンを使用することができます。レコードの

public enum Whatever { 
    INSTANCE, YETANOTHER 
} 

:バイシングルトンのような行くにそれを回すよう

public enum Whatever { 
    INSTANCE; 
} 

私はちょうど単語 "BI-シングルトン" を作っ。これは概念的観点からは0に近い意味である。複数のインスタンスが必要な場合は、シングルトンではありません。期間。だからあなたの質問はXYの問題のように聞こえる。

ちょうどメモ:その列挙型ソリューションの使用を検討してください。デフォルトではスレッドセーフであるため、あなたが使っているコードはそうではありません。しかし、変更を加える前に、これらのアプローチの長所と短所を理解するために少しの研究を行います。

0

有効なユースケースでは絶対に有効な質問です。つまり、静的なファクトリメソッドを使用する場合は、プライベートコンストラクタを持つクラスのインスタンスを複数持つことができます。コンストラクターを非公開にすることで、クラスを外部からインスタンス化できないようにしますが、問題のクラスでも何度でもインスタンス化できます。

詳細とコードサンプルについてはthis articleを確認してください。 希望に役立ちます。

関連する問題