問題タブ [multiton]
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.
java - Javaでのスレッドセーフマルチトン
次のマルチトンが与えられます:
getInstance()メソッドの高価な同期やダブルチェックロックの論争なしに、どうすればスレッドセーフで怠惰な状態を保つことができますか?シングルトンの効果的な方法はここで言及されていますが、それはマルチトンには及ばないようです。
java - 列挙定数固有の初期化
各定数は、独自の列挙型クラスの単一のサブクラスであるため、列挙型がマルチトン (つまり、コンパイル時に認識される固定数のインスタンスを持つクラス) を実行するための優れた方法であることは誰もが知っています。ただし、列挙定数固有の初期化を行う方法の問題に遭遇しました。
次の列挙型があるとします。
私がしたいのは、FooFactory
インスタンスを初期化することですInputMethod.FOO
。そのためには、たとえばFooFactory.newInstance()
. ただし、これは例外をスローする可能性があるため、簡単に言うことはできませんfactory = FooFactory.newInstance()
。InputMethod.BAR
FooFactory をまったく使用しないため、これを列挙型のコンストラクターに入れることはできません。列挙型定数自体の初期化に対して静的初期化が行われる順序が原因で、静的初期化を使用しても機能しないようです。最後に、コンストラクターを明示的に宣言することはできません。これは、コンストラクターのインスタンスであるサブクラスがInputMethod
たまたまFOO
匿名であるためです。
では、遅延初期化に自分自身を辞任する以外に、FooFactory
インスタンスを適切に初期化するにはどうすればよいでしょうInputMethod.FOO
か?
php - マルチトンまたは任意の設計パターンを使用した複数のデータベース接続
複数のデータベース接続用に次のコードがあります。それは良いデザインではありません。すべてが静的です。しかし、それを改善する方法がわかりません。クエリの準備などの機能を追加できますが、現在は良い/クリーンなデザインが必要です。マルチトンのデザインパターンを作ってみました。要件は、最初に 1 つのデータベースに接続し、次に他のすべての mysql クライアントのデータベースの詳細を取得し、次にループして各データベースに接続し、何かを行うようなものです。したがって、複数の接続が必要です。
java - スレッドセーフなマルチトン パターン
特定の回答へのコメントに触発されて、一意のキーに依存し、それらをロックするマルチトン パターンのスレッド セーフな実装を作成しようとしました (この質問に関するJB Nizetの回答からアイデアを得ました)。
質問
私が提供した実装は実行可能ですか?
マルチトン(またはシングルトン)が一般的に良いパターンであるかどうかには興味がありません。それは議論になります。クリーンで機能する実装が欲しいだけです。
短所:
- コンパイル時に作成するインスタンスの数を知っておく必要があります。
長所
- クラス全体、またはマップ全体のロックはありません。への同時通話
getInstance
が可能です。 - unbounded
int
またはだけでなく、キー オブジェクトを介してインスタンスをString
取得するため、メソッド呼び出し後に null 以外のインスタンスを確実に取得できます。 - スレッドセーフです(少なくともそれが私の印象です)。
マップのサイズ変更と、同期する列挙型の誤用を防止しようとしました。私がそれを乗り越える前に、それは概念実証のようなものです! :)
java - Multiton パターン使用の副作用
マルチトン パターンの実装について、アドバイス、コード レビュー、または改善が必要です。mongodb サーバーのマルチコネクションをサポートしたい。
マルチトンパターンのベストプラクティスは何ですか?
java - シングルトン パターン: マルチトン?
シングルトン パターンのマルチトン実装がどのように機能するかについて混乱しています。シングルトンの定義は次のとおりであることを認識しています。
クラスが作成できるオブジェクトは 1 つだけであることを確認し、オブジェクトへの単一のアクセス ポイントを提供します。
しかし、シングルトン パターンの enum バージョンを使用する場合、マルチトンではクラスの複数のオブジェクトを作成できないでしょうか?
例えば:
c++ - 仮想 getter メソッドを必要とせずにアクセスできる、クラスごとのデータの C++ イディオム
(この質問は反射に関連していますが、実際には反射についてではありません)
このクラスの階層 ( とclass A
などclass B : public A
) があり、インスタンス固有のデータに加えて、クラス固有のデータをすべてのインスタンスで共有したいと考えています。たとえばFunnyClassName
、クラスごとに文字列が必要だとします。
次のように、クラスごとのデータに非仮想ゲッターを使用できるようにしたいと考えています。
最も重要なことは、クラスを継承する際にボイラープレート コードをまったく使用しないか、できるだけ少なくしたいということです。class A
getter は(クラス階層のルート) に一度実装されます。クラス B は、別の方法でその FunnyClassName を指定する必要があります。
クラスの型ハッシュをキーとして使用する Multiton オブジェクトが合理的な解決策の基礎になる可能性があることが示唆されています (たとえば、SO に関するここでの質問で間接的に)。そうですか?これを行う「標準」コードはありますか (STL または Boost など)? 関連する別のアプローチはありますか?
注:
- これは不可能だと思いますか?この質問とこの(簡潔な)回答を参照してください。しかし、一部のコメンターやレスポンダーが示唆するように、非静的ゲッターが必要になる場合があり、すべてのクラスでゲッターを書き換える必要がない (つまり、RTTI を使用する) というより弱い制約を作成する必要があります。
- C++ に静的仮想データ メンバーがある場合、これは些細なことです -
virtual static const std::string FunnyName
。静的仮想メソッドでも可能ですが、基本クラスに実装されているゲッターのみの要求を削除した場合に限ります。と のようなものが/* static??*/ static const std::string& A::GetFunnyName() { return "Aye"; }
あり/* static??*/ const std::string& B::GetFunnyName() { return "Bee"; }
ます。 - テンプレート化されたクラスの場合には特に興味はありませんが、それにも対処したいのであれば、それは素晴らしいことです。
- FunnyName() は単なる例です。かもしれません
const Thing& GetFunnyThing()
。typeid.name() からのクラスの名前、またはそのデマングリングなどは必要ありません。 - C++11 は問題ありませんが、C++03 でのソリューションの方が優れています。C++14 は使用しないでください。
java - ベスト プラクティス : 遅延初期化によるスレッド セーフな Multiton パターン
アイデアは、「タイプ」に基づいて異なるシングルトン インスタンスを返すファクトリ クラスを作成することです。【マルチトンパターン】。また、シングルトン インスタンスは遅延して作成する必要があります。
以下のコードはスレッドセーフですか? ConcurrentHashMap を使用すると簡単になりますが、HashMap で試してみたいと思います。
c# - How to make list with unique values with dictionary (multiton pattern)
I need to make this magazine_list that holds only unique values and do it by using dictionary and multiton pattern.
List cannot have two objects with the same both name and price.
I found only one example of multiton pattern in c# and it didn't solve my problem.
It's simplified version of code that I already have, but these are the most important things of that problem.