問題タブ [singleton]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
4 に答える
77113 参照

java - JavaでEnumをシングルトンとして使用するための最良のアプローチは何ですか?

SO question Best Singleton Implementation In Javaに書かれている内容に基づいて構築- つまり、列挙型を使用してシングルトンを作成することについて - 間の違い/長所/短所は何ですか (コンストラクターは省略されています)

そして呼び出すElvis.INSTANCE.getAge()

そして呼び出すElvis.getAge()

0 投票する
4 に答える
9072 参照

php - PHPシングルトンクラスはリクエスト間で何らかの形で共有されていますか?

すべての PHP クラス ファイルでシングルトン パターンを使用しています。

サイトでのユーザーのアクションが、他のユーザーのアクションと競合する可能性はありますか?

たとえば、アプリケーションが稼働し、サイトに同時に複数のユーザーがいる場合、シングルトンはクラスの複数のインスタンスを防ぎ、単一のインスタンスのみを返すため、同じ PHP クラスを呼び出すことで同様のことを行います (舞台裏で)。 .

たとえば、Search.php というクラスがあり、それはシングルトン クラスです。このクラスは、Web サイトからのすべての検索クエリを処理します。複数のユーザーがサイトで同時に検索を実行している場合、作成できる Search クラスのインスタンスは 1 つだけであるため、それらのユーザーのアクションは互いに競合します。

ありがとうございました。

0 投票する
1 に答える
4669 参照

singleton - smalltalk シングルトン パターン: インスタンス変数を初期化するにはどうすればよいですか?

smalltalk でインスタンス変数を初期化するシングルトン パターンを取得するのに問題があります。(明確にするために、別の実装へのリンクを次に示します)

これは私が持っているものです:

最後の行 (UniqueInstance: instanceVar := Object new.) は機能しませんが、これが基本的に必要なことです。UniqueInstance を呼び出し元に返す前に、instanceVar をオブジェクトとしてインスタンス化します。

この「新しい」メソッドはクラスのインスタンス化として使用され、ライブラリは UniqueIsntance (必要なクラスのインスタンス) のインスタンス変数であることに注意してください。

誰かが私を正しい方向に向けることができますか?

0 投票する
4 に答える
1205 参照

.net - シングルトン DAL クラス

DAL (customerDAL) のクラスはシングルトンであるべきではありませんか? 私のコントローラー (customerController) は「Shared Subs」を公開するため、すべての呼び出しで、既に存在する場合は新しい DAL オブジェクトを作成する必要はありません。正しい?

ありがとう

0 投票する
4 に答える
4682 参照

java - 単体テストからのオーバーライドを使用したJavaでの遅延「1回実行」初期化の方法

シングルトンのように動作するが、そうではないコードを探しています(シングルトンが悪いため:)私が探しているものはこれらの目標を満たさなければなりません:

  1. スレッドセーフ
  2. シンプル(理解して使用する、つまり数行のコード。ライブラリ呼び出しは問題ありません)
  3. 速い
  4. シングルトンではありません。テストの場合、値を上書き(およびテスト後にリセット)できる必要があります。
  5. ローカル(必要な情報はすべて1か所にある必要があります)
  6. レイジー(値が実際に必要な場合にのみ実行)。
  7. 1回実行(RHSのコードは1回だけ実行する必要があります)

コード例:

フィールドは静的ではないことに注意してください。式のRHS(右側)だけが...ある程度「静的」です。iテストでは、greet一時的に新しい値を挿入できる必要があります。

また、このコードは、この新しいコードの使用方法の概要を示していることにも注意してください。runOnce()を何かに置き換えるか、別の場所(コンストラクター、多分、またはinit()メソッドまたはゲッター)に移動してください。ただし、LOCが少ないほど良いです。

いくつかの背景情報:

私はSpringを探していません。最も一般的なケースに使用できるコードを探しています。インターフェースを実装する必要があり、必要なテストを除いて2番目の実装はありません。モックオブジェクトを渡します。また、Springは#2、#3、#5に失敗します。構成言語を学ぶ必要があります。アプリコンテキストをどこかに設定する必要があります。XMLパーサーが必要であり、ローカルではありません(情報はいたるところに分散しています)。

#5のため、グローバル構成オブジェクトまたはファクトリは法案を満たしていません。

static final#4のためにアウトです(ファイナルを変更できません)。staticクラスローダーの問題のためににおいがしますが、おそらく内部で必要になりますrunOnce()。式のLHSでそれを避けられるようにしたいと思います。

考えられる解決策の1つは、同じオブジェクトを返すデフォルト設定でehcacheを使用することです。キャッシュに入れることができるので、いつでも値を上書きすることができます。しかし、おそらくehcacheよりもコンパクトでシンプルなソリューションがあります(これもXML構成ファイルなどが必要です)。

[編集]なぜそんなに多くの人がこれに反対するのか疑問に思います。これは有効な質問であり、ユースケースはかなり一般的です(少なくとも私のコードでは)。それで、あなたが質問(またはその背後にある理由)を理解していない場合、またはあなたが答えを持っていないか、あなたが気にしない場合、なぜ反対票を投じますか?:/

[EDIT2] Springのアプリコンテキストを見ると、すべてのBeanの99%以上に単一の実装しかないことがわかります。あなたはもっと持つことができますが、実際には、あなたは単にそうではありません。したがって、インターフェイス、実装、構成を分離する代わりに、実装(最も単純な場合)、current()メソッド、およびcurrent()の結果を初期化するための1行または2行の巧妙なコードのみを含むものを探しています。 1回(初めて呼び出されたとき)、同時に結果をオーバーライドできます(可能な場合はスレッドセーフ)。これをアトミックな「if(o == null)o = new O(); return o」と考えてください。ここで、oをオーバーライドできます。たぶん、AtomicRunOnceReferenceクラスが解決策です。

今のところ、私たち全員が毎日持っているものや使用しているものは最適ではなく、私たち全員が頭を叩いて「それだけ」と言うような不可解な解決策があると感じています。数年前に春が来たときに感じたように、私たちはすべてのシングルトンの問題がどこから来たのか、そしてそれらをどのように解決するのかを理解しました。

0 投票する
9 に答える
13822 参照

.net - 静的メンバーを使用して .NET インターフェイスを作成するには?

.NET 3.5 では、シングルトン インターフェイスを作成したいと思います。

もちろんそれはうまくいきませんが、私が望むものです。助言がありますか?

編集:すべてのシンゲルトンがクラス型のインスタンスという名前の静的プロパティを持つことを知ってもらいたいだけです。それは常にそこにあります。インターフェイスは、これを明示的に表現する方法です。

0 投票する
4 に答える
10625 参照

c++ - C++ シングルトン GetInstance() の戻り値

C++ でシングルトンを実装する場合、GetInstance() がシングルトン オブジェクトへのポインターまたは参照を返す方が良いですか? それは本当に問題ですか?

0 投票する
4 に答える
42949 参照

c++ - GetInstanceメソッドの静的変数として宣言されたシングルトンインスタンスは、スレッドセーフですか?

インスタンス変数が GetInstance メソッドで静的変数として宣言されたシングルトン パターンの実装を見てきました。このような:

このアプローチには、次のような良い面があります。

  • GetInstance が初めて呼び出されたときにのみ、このオブジェクトの作成を担当するのはコンパイラであるため、コードはより単純です。
  • インスタンスへの参照を取得する方法は他にありませんが、GetInstance メソッドを使用し、インスタンスを変更する方法は他にありませんが、GetInstance メソッド内であるため、コードはより安全です。

このアプローチのマイナス面は何ですか? これはスレッドセーフですか?

0 投票する
8 に答える
700 参照

design-patterns - シングルトンが最良の選択肢である場合はありますか?

このサイトでは、シングルトンを避ける必要がある理由について多くの議論がありますが、シングルトンが理にかなっていて最良の選択肢である場合はありますか?

シングルトンが最良のオプションであると私が考える例は、マッピング層のデータベースからすでにロードされているすべてのモデルを追跡する必要があるIDマップを実装する場合です。この場合、すべてのクライアントコードがマップの同じインスタンスを使用し、ロードされたモデルの同じリストにすべてアクセスできるように、マップが事実上グローバルであることが重要です。最も簡単な解決策は、クラスをシングルトンとして(または静的メソッドとして)実装することのようです。これが最善のアプローチですか、それとも別の方法がありますか?

シングルトンを使用しても問題がない場合や、常に悪い場合は他にありますか?

0 投票する
6 に答える
4397 参照

c# - ファイナライザーを使用するが IDisposable を使用しないシングルトン

これは、「C# 経由の CLR」、「効果的な C#」およびその他のリソースから IDisposable およびファイナライザーについて理解していることです。

  • IDisposable は、マネージド リソースとアンマネージド リソースを確定的にクリーンアップするためのものです。
  • アンマネージ リソース (ファイル ハンドルなど) を担当するクラスは、IDisposable を実装し、クライアント コードがインスタンスで Dispose() を呼び出さなくてもクリーンアップされることを保証するファイナライザーを提供する必要があります。
  • 管理対象リソースのみを担当するクラスは、ファイナライザーを実装しないでください。
  • ファイナライザーがある場合は、IDisposable を実装する必要があります (これにより、クライアント コードは正しいことを実行して Dispose() を呼び出すことができますが、ファイナライザーは忘れた場合のリソースのリークを防ぎます)。

上記のすべての理由を理解して同意しますが、これらのルールを破ることが理にかなっているシナリオが 1 つあります。それは、管理されていないリソース (特定のファイルへの単一アクセス ポイントを提供するなど) を担当するシングルトン クラスです。 )。

シングルトンインスタンスはアプリケーションの存続期間中存続する必要があり、クライアントコードが Dispose() を呼び出すと、詰め込まれているため、シングルトンに Dispose() メソッドを持つことは常に間違っていると思います。ただし、アプリケーションがアンロードされたときにファイナライザーがアンマネージ リソースをクリーンアップできるように、ファイナライザーが必要です。

したがって、IDisposable を実装しないファイナライザーを備えたシングルトン クラスを持つことは、合理的なことのように思えますが、このタイプの設計は、私が理解しているベスト プラクティスに反しています。

これは合理的なアプローチですか?そうでない場合、その理由と、優れた代替手段は何ですか?