Javaのシングルトンは静的変数またはメンバ変数を使用する必要がありますか?どちらにも利点がありますか?Javaシングルトンは静的変数を使用すべきですか?
答えて
メンバー変数を使用する必要があります。シングルトンはオブジェクト(すなわち、クラスのインスタンス)であり、そのようにモデル化されるべきである。それらのうちの1つを作成するつもりであっても。
スタティックは、クラスレベルの変数に使用する必要があります。
メンバー変数は静的変数の親です。http://www.programmerinterview.com/index.php/c-cplusplus/whats-the-difference-between-a-class-variable-and-an-instance-variable/ – SpringLearner
あなたは、静的変数の使用を避け、代わりにEnum
を使用することができます。
public enum MySingleton {
INSTANCE;
}
あなたはMySingleton.INSTANCE
としてこのシングルトンにアクセスすることができます。
Enumはスレッドセーフであり、SingletonからEnumまでの実装では、マルチスレッド環境でもシングルトンにインスタンスが1つしか存在しません。
静的変数またはメンバー変数を使用することは必須ではありません。シングルトンは論理的に1つのインスタンスしか持たないので、静的変数またはメンバ変数を使用しても差異はありません。静的変数とインスタンス変数の差が保持される以外は、静的変数はクラスのロード時に初期化されますが、インスタンス変数はインスタンス作成時に初期化されます。
一般的なプログラミングルールとして、静的変数が必要かどうかを決定する必要があります。単純にパブリック静的変数を作成し、不要な問題に終止符を打たないでください。ですから私の個人的な意見では、物事を単純でコントロールし続けるためにインスタンス変数を優先させるべきです。
を参照してください。間違いなく最も一般的な使い方は、メンバ変数を保持する通常のオブジェクトであることです。たとえば、あるオブジェクトを他のオブジェクトと簡単に置き換えることができます(他のすべてのプロパティを使用)。
すべてのクラスは静的変数を持つことができますが、シングルトンであるかどうかは分かりません。
その性質上、シングルトンパターンはオブジェクトのインスタンスを扱います。統計は、クラスのメーターです - >シングルトンパターンとの関係はありません。
多くの情報がすでに提供されています。静的変数またはインスタンスを指す静的変数を使用するか、列挙型を使用します。
あなたの単一トンが別のクラスのサブクラスであるクラスのメンバである場合、大きな違いがあります。
したがって、シングルトンインスタンスはスーパークラスから継承されます。
これには大きな利点があります。
列挙型は互いに拡張できませんが、インタフェースを実装する列挙型を使用できます。
シングルトンインスタンスへの静的参照が必要ですが、インスタンス自体は通常のクラスと同様にインスタンス変数を使用する必要があります。
なぜなら、シングルトンインスタンスはすべてオブジェクトの後ろにあるからです。だから、普通の良いデザインの原則はまだそのクラスに当てはまります。
さらに、今日はですが、明日はそれがThreadLocalであるか、インスタンス作成の制限がありません。クラスが通常の方法で設計されている場合、これらのアーキテクチャ上の選択肢の変更は非常に少ないです。静的フィールドを使用する場合、そのような変更は、フィールドを非静的にするために、より多くのメンテナンス作業を必要とします。
- 1. Javaの静的メソッドで非静的変数を使用できますか?
- 2. Javaで静的変数を使用
- 3. Javaジェネリック、シングルトン、静的メソッド
- 4. 頂点で静的メソッドで非静的変数を使用できますか?
- 5. Javaで静的関数を使用するインスタンス変数
- 6. メインメソッド、静的変数、静的メソッドを使用せずにJavaメッセージをコンソールに出力できますか?
- 7. Javaの静的変数は
- 8. 静的メソッドと静的変数のjava
- 9. Javaの非静的クラスで静的変数を宣言する
- 10. java:非静的変数を静的コンテキストから参照できないError
- 11. メンバー関数内で静的変数を作成できますか?そのクラスのインスタンス内では静的変数のみが使用できますか?
- 12. Javaでは、(静的に)コンストラクタまたはローカル変数をインポートできますか?
- 13. WPFの静的変数からシングルトンへの移行
- 14. 一般的なシングルトンでの静的フィールドの使用
- 15. グローバル変数に静的クラスを使用するか、静的プロパティを使用するだけですか?
- 16. 静的クラスとシングルトン
- 17. 静的クラスとシングルトン
- 18. 静的クラスに非静的メソッドと変数を使用できないのはなぜですか?
- 19. クラスの静的関数は、グローバル静的変数にアクセスできますか?
- 20. Javaの静的変数
- 21. Javaの非静的変数
- 22. Java静的クラス/変数
- 23. コアJava静的変数ロード
- 24. Javaの静的変数
- 25. Java静的インタフェース変数
- 26. Javaで静的に使用
- 27. Javaで静的を使用する
- 28. Javaで静的変数と複雑な使用
- 29. 静的変数の使用と使用
- 30. 静的にも動的にも使用できるTypescript変数
参照:http://stackoverflow.com/questions/519520/difference-between-static-class-and-singleton-pattern –
少なくとも1つの静的変数を使用せずにシングルトンを構築できます。 – dasblinkenlight
@dasblinkenlightはい、私は1つ必要ですが、問題はメンバの変数または静的変数のいずれかになりうる他のすべての変数についてです。 – Andreas