問題タブ [flyweight-pattern]

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 投票する
1 に答える
351 参照

boost - boost::flyweightを使用する構造体T{}の内部(つまり、再帰的なフライ級)

boost :: flyweightを利用してパスコンポーネントを共有し、不変のファイルパス値タイプを定義しようとしています。このようなもの:

もちろん、これは再帰的な構造のように見えますが、boost::flyweight<T>実際には(それ自体)のコピーは含まれていません。適切なホルダーで検索できるTハンドルだけなので、この構造は機能するはずです。T

残念ながら、g ++がtypedefにヒットすると、filepath_dataが不完全であると文句を言うため、コンパイルされません。

したがって、問題は、boost::flyweight<>この構造を機能させるために柔軟性とより高度なテンプレート引数を利用できるかどうかです。その場合、どのように機能しますか?

0 投票する
2 に答える
541 参照

java - Flyweight : Strings already use String pool : Flyweight の String オブジェクトをプールするのは理にかなっていますか?

文字列はすでに Flyweight デザイン パターンを使用しています。共通の String オブジェクトをプールすることは有益/効率的ですか? 文字列はすでに文字列プールから引き出されるのでしょうか?

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

design-patterns - Flyweight パターン - Flyweight をデータ構造に格納する方法は?

GoF book の Classic Flyweight パターンの実装例では、共有可能な「Characters」に文字コードのみを格納し、「GlyphContext」を使用して外部状態をツリー構造に格納します。この例では、行と列についても言及していますが、フライウェイト (「文字」オブジェクト) の「コレクション」を格納する方法については言及していません。

このパターンにより、インスタンスを共有することで膨大な数のオブジェクトを作成することを回避できることは明らかですが、キャッシュされたオブジェクトへの参照の構造を作成せずに (たとえば、ドキュメントを表すために) そのようなオブジェクトの構造を作成するにはどうすればよいでしょうか (これにより、オブジェクトが無効になります)。パターンの目的)?他の例では、キャッシュされたインスタンスを「使い捨て」オブジェクトとして使用し、構造を構築することはありませんが、一連の静的操作に置き換えることができるため、これは意味がないようです。

作成後に flyweight を参照する必要がある場合、パターンの利点は[固有状態のサイズ]/[オブジェクト参照のサイズ]として大まかに計算できると結論付けるのは正しいですか。これは、フィールドが 1 つしかないフライ級は意味がないということですか?

編集:「メモリ計算」が間違っていました...フライウェイトがなければ、とにかく参照を保存する必要がありますが、フライウェイトを使用すると、オブジェクトを保存する必要がなくなります。質問の基本的なポイントはまだ有効であるようです-パターンによって提供される節約の程度は、「論理オブジェクト」の数ではなく、固有の状態のサイズに比例します。正しいか間違っているか?

0 投票する
2 に答える
3995 参照

design-patterns - フライウェイトパターンの良い例は何ですか?

c#での文字列の抑留は良い例です。その他?

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

java - Java flyweight パターンの実装はありますか?

flyweight パターンの実装を探していましたが、Google 検索の 20 ページに到達した後、あきらめました。無数のばかげた例がありますが、Java で再利用可能な実装を公開した人は誰もいないようです。

私にとって、flyweight は、そのようなインスタンスを多数保持する必要がある場合にのみ意味があるためコレクションとして実装する必要があります。私が望むのは、バイト/ショート/整数/ロングマッパーの実装を取り、通常のオブジェクトコレクションのように見えるリスト、セット、またはマップのいずれかを返すファクトリですが、そのデータはプリミティブの配列として内部的に保存されます。多くのラムを節約します。マッパーは X 型のオブジェクトを受け取り、それをプリミティブにマップするか、その逆を行います。

そのようなものはどこかにありますか?

[編集]何百もの例があるだけでなく、このパターンをサポートするコレクションライブラリを探しています。

0 投票する
5 に答える
4546 参照

java - Java での Flyweight の例

Java で flyweight オブジェクトを作成しようとしています。私はObjective-Cで同様の概念を扱ってきました(Objective-Cのシングルトンクラス//それらは同じものだと思います)。

flyweight オブジェクトを作成して使用する方法を学ぶためにオンラインでチュートリアル、例、または説明を見つけようとしていますが、Google で検索しましたが、降下するものは見つかりません。私は 10 ページを調べましたが、基本的にはすべて、概念を説明する 1 つの Web サイトから盗用しています。私は概念を理解しています - Java でそれを実装する方法を教えてくれる/教えてくれる何かが必要です。

誰にも提案/チュートリアルはありますか?

ありがとう!

0 投票する
3 に答える
234 参照

java - Flyweight パターンで静的インスタンスを非静的インスタンスに割り当てる

私はhttp://www.oodesign.com/flyweight-pattern-wargame-example-java-sourcecode.htmlSOLDIERで Flyweight サンプル コードを調べていて、静的インスタンス (上記のサイトのように) を割り当てると実際にどのように機能するのか疑問に思いました) で非静的な兵士のインスタンスに変換するSoldierClientと、オブジェクトのサイズを実際に縮小できSoldierClientますか?SOLDIERSoldierClient

編集:

それが言う方法moveSoldier() では

// 前の場所から兵士の表現を削除します
// その後、新しい場所で兵士の表現をレンダリングします

これがクラスで作成されたすべてのオブジェクトに影響しないのはなぜですかWarGame

0 投票する
2 に答える
2126 参照

c++ - フライ級をサポートするためにブーストunordered_mapを作成する方法

私は次のことをしようとしています:

しかし、コンパイラは次のように文句を言います。「エラーC2665:'boost :: hash_value':17個のオーバーロードのいずれもすべての引数タイプを変換できませんでした」。

しかし、私は次の関数を定義しました:

しかし、それはコンパイルされません。

フライウェイトをサポートするためにブーストunordered_mapを作成するには何をする必要がありますか?

[編集]次のコードで動作するようになりました:

そしてそれをテンプレートパラメータとしてマップの構築に渡しました。

この場合、hash_valueのオーバーロードが機能しなかった方法がわかりません。

0 投票する
2 に答える
957 参照

java - flyweight デザインパターンはどのようにさまざまなオブジェクトを維持しますか?

(フライウェイトを読んでいるときにこの例を見つけました)
ゲームにソルジャーと呼ばれるオブジェクトがあり、このオブジェクトはその場所だけが異なると仮定しましょう。
私の質問は
、このオブジェクトでフライウェイトパターンを使用するかどうかです。ゲーム中に何度も兵士を取得し、各兵士に独自の場所を持たせたい.
どうすればそれを処理できますか?

0 投票する
3 に答える
372 参照

c++ - Boostと外部データソースを備えたフライウェイト

たぶん、私が見ていないこれを回避する簡単な方法があるので、誰かが私にそれを説明できることを願っています。

私がクラスを持っているとしましょう:

そして、そのクラスのジェネレーターは次のとおりです。

これらのオブジェクトへの参照は数百万になる可能性があり、実際には大量のデータが含まれているため、boost::flyweightこれらのオブジェクトを処理するために使用したいと思います。Aそれらは一緒にハッシュされnameますfileName

これを機能させるには何が必要ですか?結果のクラスboost::flyweightを呼び出しAReader.readObjectてハッシュ/保存する必要があります。A

AReaderフルファクトリになり、カスタムファクトリとして使用する必要がありますか?または、フライウェイトでデフォルトのファクトリを使用し、インスタンスをフライウェイトの何かへの引数にすることによって、インスタンスAReaderを生成するために使用することは可能ですかA(ファクトリに必要なストレージパターン全体を実装するのではなく) ?AReaderまたはconst、2番目のクラスに頼ることなく、外部データソースからパブリック変数を取得することは可能ですか(つまり、一度設定すると変更されません)?

編集

Boostを使用しない他の提案も受け付けています。私は確かにフライ級の独自の実装、またはより適している場合は他のパターンを書くことができます。しかし、私がすでに存在するものを使用できるのであれば、それが最善でしょう。いつものように、締め切りが短いので、私が書く必要のあるコードの量を最小限に抑えるものは何でも。