重複の可能性:
静的クラスとシングルトン パターンの違いは?
私は考えていた、
すべてのメソッドが静的である Java の Math クラスなどのクラスは、シングルトンと見なされますか? または、シングルトンにはインスタンスが必要ですか?たとえばMath.getInstance().abs(...
、シングルトンとしての資格を得るには?
ありがとう
重複の可能性:
静的クラスとシングルトン パターンの違いは?
私は考えていた、
すべてのメソッドが静的である Java の Math クラスなどのクラスは、シングルトンと見なされますか? または、シングルトンにはインスタンスが必要ですか?たとえばMath.getInstance().abs(...
、シングルトンとしての資格を得るには?
ありがとう
クラスに静的メソッドがあるだけでは、それが であるとは言えません。その中Singleton
に があれば、そのクラスのインスタンスをいくつでも作成できるpublic constructor
からです。
クラスが として認定されるには、クラスの外部からインスタンス化できないように がSingleton
必要であり、呼び出されるたびに を返す が必要です。private constructor
static factory
same instance
あなたが本当に意味するならstatic class
、まず第一に、top-level
クラスを として持つことはできませんstatic
。のみを持つことができstatic nested class
ます。その場合、そのクラスのインスタンスを作成する必要はありませんが、複数のインスタンスを作成できるため、そうではありませんSingleton
。
また、あなたが言及したクラス -java.lang.Math
は静的クラスではありません。そのドキュメントを参照してください。
Java の静的クラスは、内部クラスではないネストされたクラスです。(たとえば、C# の静的クラスとは異なります。) インスタンス メソッドや状態などを保持でき、複数のインスタンスが存在する可能性があります。
java.lang.Math
静的クラスではありません。
いいえ、インスタンスを持たないクラスはシングルトンではありません。重要な違いは、シングルトンはインターフェイスを実装できる (または抽象クラスから派生することさえできる) ことですが、クラスのインスタンスを作成しない場合、インスタンス メソッドは無意味です。
シングルトン パターンが適用されたクラスは、JVM で常に1 つのインスタンスを持っているか、まったくインスタンスを持っていません。それがシングルトンと呼ばれる所以です。static
またはメンバーを持つことは、シングルトンまたは非non-static
シングルトンであることとは関係ありません。
静的クラスは通常、いくつかのヘルパー メソッドを提供します。実際、静的クラスをシングルトンと比較するのは適切ではないと思います。両者は完全に異なります。
静的クラスの複数のインスタンスを作成できますが、シングルトンは (理論的には少なくとも) 単一のインスタンスのみを保証します。
一度だけ初期化されるシングルトンの意味を持つインスタンスが必要になります。
シングルトンは、環境内にそのクラスのインスタンスが最大 1 つだけ存在することを保証します。静的メソッドの束を持つクラスとは異なります。シングルトンは状態を保持し、実行時の値を保持できますが、クラスの静的メソッドは保持できません。
それを行うために静的な値を使用できると主張することができますが、静的変数の目的は異なります (グローバル変数のように悪用されることもあります)。したがって、シングルトンは静的メソッドとは異なるコンテキストで動作します。
シングルトンは通常、静的インスタンスが理想的ではないリソース (別のサーバーへの接続、ファイルへのアクセスなど) にも関連付けられます。シングルトンは遅延ロードも可能にしますが (リソースへの接続またはアクセスが高価な場合)、クラスローダがそれらへの参照に遭遇したときにクラスがロードされます。