2017-02-02 6 views
1

シングルトンパターンを実装する新しい方法を探求したいと考えました。この実装をシングルトンパターンと見なすことができますか?いいえの場合は、コードを改善するための提案をしてください。このようなシングルトンパターンを実装できますか?

public interface Test { 
     Singleton single = new Singleton(); 
     class Singleton { 
      int i = 10; 
      private Singleton(){} 
     } 
    } 
+0

インターフェイスを持たない – efekctive

+0

なぜあなたはこれをやりますか? – byxor

+0

@Kiran Bhagwat、あなたは非常によくシングルトンパターンを実装するためにあなたのアプローチを使用することができます。 'interface'フィールドは暗黙のうちに' public static final'です。それらは一度だけロードされます。あなたは内部クラス用のプライベートコンストラクタを持っていて、インタフェースの内部クラスは静的に静的であるため、外部クラスの 'インスタンス 'に依存しません。あなたのアプローチは、他の従来のアプローチが既に存在するが、依然としてあなたのアプローチが機能するので最良ではありません。より詳細な答えは私の答えを確認してください。 –

答えて

0

はいこの方法でSingletonパターンを実装できます。 Interfaceで宣言されたフィールドはすべて最終的かつ静的です。プライベートコンストラクタを持つインターフェイスの内部クラスが定義されています。あなたのやり方は異なりますが、縫い目は機能します。フィールドは静的で最終的なので、インターフェイスの.classファイルがロードされるときに一度だけインスタンス化されます。

コードは機能しますが、それでもシングルトンを実装する最良の方法ではありません。プライベートコンストラクタを使用して通常のパブリッククラスを作成できます。このクラスでは、同じクラスの型のpublic static finalフィールドを定義し、newキーワードで初期化します(クラス内のコードがプライベートエンティティにアクセスできるため、コンストラクタがプライベートであってもそうすることができます)。あなたのクラスは今やSingletonです。これを行う別の方法はEnumです。

関連する問題