問題タブ [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 に答える
226 参照

design-patterns - Flyweight パターン : UnsharedConcreteFlyweight

Flyweight パターンの構造図は次のとおりです。

ここに画像の説明を入力

ここに、GoF が説明する UnsharedConcreteFlyweight が表示されます。

UnsharedConcreteFlyweight : すべての Flyweight サブクラスを共有する必要はありません。Flyweight インターフェイスは共有を可能にします。それは強制しません。UnsharedConcreteFlyweight オブジェクトが、Flyweight オブジェクト構造のあるレベルで子として ConcreteFlyweight オブジェクトを持つことは一般的です (Row クラスと Column クラスのように)。

ここでは、私が理解している限り、引数としてOperation取りますが、メンバーデータとしてin extrinsicState持っている限り、まったく使用しません。allState

良いデザインですか?使用しない引数を取るには、使用する場合はデータが重複します。これは、リスコフの置換原則違反でさえありますか?

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

java - フライウェイトから自己取り外し可能なリソース

リアクティブストリームを操作しながら、閉じる必要があるさまざまなリソースを使用してアプリケーションに取り組んでいます。

オブジェクトへの参照を保持する flyweight パターンに基づくファクトリがあり、AutoCloseable インターフェイスを実装しています。問題は、Autocloseable クラス内で close() を使用していることです。これが私の質問です: 工場内の閉じたリソースへの参照を削除するための最良の解決策は何ですか? ある種のイベントをスローしてファクトリでキャッチできますか、またはリソースを閉じることができるすべてのアクションの後に、参照マップを反復処理して閉じたリソースを削除する必要がありますか?

より良いコンテキストのために:ディレクトリイベント(ファイル/ディレクトリの作成、削除)を発行するreactivex Observableを使用しています。すべてのサブスクライバーがサブスクライブを解除した後、使用しているWatchServiceを閉じています。

編集#1

ここで、私のファクトリ クラスは次のようになります。

そして、これが私の ReactiveStream クラスがどのように見えるかです:

ご覧のとおり、ReactiveStream クラスへの参照を保持するファクトリがあります。これは、観察可能になった後に閉じられ、サブスクライブされなくなります (共有を使用する前に doOnUnsubscribe(() -> close()) を使用する方法で行いました)。 () 監視可能であるため、サブスクライバーが存在しない場合、doOnUnsubscribe が呼び出されます)。

私の質問は、Factory から閉じた ReactiveStream への参照を閉じた後に削除するにはどうすればよいですか?

編集#2

オブザーバブルを作成する方法は次のとおりです。EventObtainer は、各サブスクライバーがサブスクライブを停止した後に閉じる必要がある WatchService を使用する ReactiveStream のネストされたクラスです。

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

swift - Swift SceneKit を使用した Flyweight デザイン パターン。オブジェクトの再利用

拡張現実 iPhone アプリケーションを作成していますが、大量の SceneKit ノードをレンダリングする必要があります。Gamma、Helm、Johnson、および Vlissides によるDesign Patternsで説明されている Flyweight デザイン パターンを統合したいと考えています。また、チュートリアルはこちらFlyweight Design Pattern ただし、実装と Swift がオブジェクトを処理する方法に関する問題に直面しています。

TL;DR: Swift で同じSCNNodeものをARSCNView複数回追加して別の位置に表示する方法はありますか?

Flyweight を活用したいBoxbuildsというクラスがあります。aSCNBox本質的な状態Boxは次元です。外部状態は、その色と位置です。

ボックスクラス

以前のオブジェクトが同じ色であるかどうかをチェックするディクショナリを使用してデザインを実装するファクトリ クラスがあります。その場合はオブジェクトを再利用し、そうでない場合は新しいオブジェクトを作成します。

ファクトリークラス

そしてARSCNView、ボックスを表示するオブジェクトを保持するView Controller。

ただし、これにより生成される緑色のボックスは 1 つだけです。正しいもの。2 番目のgetBox()呼び出しは、最初の位置Image belowをオーバーライドします。このパターンの実装、またはオブジェクトの再利用のこのパターンを実現するのに役立つ Swift について、誰かアドバイスはありますか?

*補足:オブジェクトの位置とその色をハッシュする必要はありません。Box色と位置が異なる多くのes があるため、同じオブジェクトを再利用するという考え全体が無効になります。

緑の箱は1つだけ