1

重複の可能性:
静的クラスとシングルトン パターンの違いは?

私は考えていた、

すべてのメソッドが静的である Java の Math クラスなどのクラスは、シングルトンと見なされますか? または、シングルトンにはインスタンスが必要ですか?たとえばMath.getInstance().abs(...、シングルトンとしての資格を得るには?

ありがとう

4

6 に答える 6

9

クラスに静的メソッドがあるだけでは、それが であるとは言えません。その中Singletonに があれば、そのクラスのインスタンスをいくつでも作成できるpublic constructorからです。

クラスが として認定されるには、クラスの外部からインスタンス化できないように がSingleton必要であり、呼び出されるたびに を返す が必要です。private constructorstatic factorysame instance

あなたが本当に意味するならstatic class、まず第一に、top-levelクラスを として持つことはできませんstatic。のみを持つことができstatic nested classます。その場合、そのクラスのインスタンスを作成する必要はありませんが、複数のインスタンスを作成できるため、そうではありませんSingleton

また、あなたが言及したクラス -java.lang.Mathは静的クラスではありません。そのドキュメントを参照してください。

于 2012-11-27T16:53:25.070 に答える
2

Java の静的クラスは、内部クラスではないネストされたクラスです。(たとえば、C# の静的クラスとは異なります。) インスタンス メソッドや状態などを保持でき、複数のインスタンスが存在する可能性があります。

java.lang.Math静的クラスではありません。

いいえ、インスタンスを持たないクラスはシングルトンではありません。重要な違いは、シングルトンはインターフェイスを実装できる (または抽象クラスから派生することさえできる) ことですが、クラスのインスタンスを作成しない場合、インスタンス メソッドは無意味です。

于 2012-11-27T16:58:38.777 に答える
1

シングルトン パターンが適用されたクラスは、JVM で常に1 つのインスタンスを持っているか、まったくインスタンスを持っていません。それがシングルトンと呼ばれる所以です。staticまたはメンバーを持つことは、シングルトンまたはnon-staticシングルトンであることとは関係ありません。

于 2012-11-27T16:53:04.363 に答える
1

静的クラスは通常、いくつかのヘルパー メソッドを提供します。実際、静的クラスをシングルトンと比較するのは適切ではないと思います。両者は完全に異なります。

静的クラスの複数のインスタンスを作成できますが、シングルトンは (理論的には少なくとも) 単一のインスタンスのみを保証します。

于 2012-11-27T16:54:58.717 に答える
0

一度だけ初期化されるシングルトンの意味を持つインスタンスが必要になります。

編集:ウィキペディアの記事へのリンクは次のとおりです

于 2012-11-27T16:52:30.920 に答える
0

シングルトンは、環境内にそのクラスのインスタンスが最大 1 つだけ存在することを保証します。静的メソッドの束を持つクラスとは異なります。シングルトンは状態を保持し、実行時の値を保持できますが、クラスの静的メソッドは保持できません。

それを行うために静的な値を使用できると主張することができますが、静的変数の目的は異なります (グローバル変数のように悪用されることもあります)。したがって、シングルトンは静的メソッドとは異なるコンテキストで動作します。

シングルトンは通常、静的インスタンスが理想的ではないリソース (別のサーバーへの接続、ファイルへのアクセスなど) にも関連付けられます。シングルトンは遅延ロードも可能にしますが (リソースへの接続またはアクセスが高価な場合)、クラスローダがそれらへの参照に遭遇したときにクラスがロードされます。

于 2012-11-27T16:56:17.623 に答える