3

Flyweightパターンのこれらの状態の違いの間で混乱しています。

intrinsic状態は共有されている状態であり、共有されていない状態であることを認識してExtrinsicいます。

extrinsicただし、パターン内または以下の例内で状態が持つ重要性はわかりません。

public static void main(String[] args) {
        // Create the flyweight factory...
        EngineFlyweightFactory factory = new EngineFlyweightFactory();
        // Create the diagnostic tool
        DiagnosticTool tool = new EngineDiagnosticTool();
        // Get the flyweights and run diagnostics on them
        Engine standard1 = factory.getStandardEngine(1300); //intrinsic
        standard1.diagnose(tool); //extrinsic

        Engine standard2 = factory.getStandardEngine(1300); //intrinsic
        standard2.diagnose(tool); //extrinsic

        Engine standard3 = factory.getStandardEngine(1300); //intrinsic
        standard3.diagnose(tool); //extrinsic

        Engine standard4 = factory.getStandardEngine(1600); //intrinsic
        standard4.diagnose(tool); //extrinsic

        Engine standard5 = factory.getStandardEngine(1600); //intrinsic
        standard5.diagnose(tool); //extrinsic

ウィキペディアでテキスト エディターに関する例を参照してください。本質的な状態は文字であり、その外部的な状態はフォント、色などですか?

4

1 に答える 1

6

flyweight パターンは、達成しようとしているものが同じタイプのオブジェクトを多数使用している状況を処理する方法です。毎回オブジェクトの新しいインスタンスを作成するのではなく、flyweight パターンはオブジェクトを再利用し、使用方法の違いを追跡するだけで済みます。ワープロは典型的な例です。あなたのウィキペディアの例から:

ドキュメント内の文字ごとに、そのフォント アウトライン、フォント メトリック、およびその他の書式設定データを含むグリフ オブジェクトを保持することが望ましい場合がありますが、これは文字ごとに数百または数千バイトになります。代わりに、すべての文字について、ドキュメント内の同じ文字のすべてのインスタンスによって共有されるフライウェイト グリフ オブジェクトへの参照が存在する可能性があります。内部に保存する必要があるのは、(ドキュメントおよび/またはページ内の) 各文字の位置のみです。

これは、パターンの使用方法の正確な説明です。固有/外部の区別に従うと、グリフ オブジェクトは固有の状態になり、それらのオブジェクトの配置 (たとえば、どのページ、段落、行に表示されるか) は、オブジェクトの外部の状態/使用法になります。

あなたの質問から、あなたが例で混乱していると思うのは、何が外因性/内因性属性と見なすことができるかということです。これは、記述した属性、フォント スタイル、フォントの色、および書体がすべて flyweight パターンの一部として再利用されるため、flyweight パターンの一部であるという意味では「本質的」であるが、「外的」であるからです。文字の特定の単語への適用を説明するという感覚。たとえば、ワード プロセッサでは、太字、斜体などのさまざまな書体の一連のグリフを使用する可能性があります。利用可能な色のコレクションを適用して再利用することもできます。次に、プログラムはこれらの属性が適用された場所を追跡しますが、上記のように純粋な外部状態ではありません。

上記のコードについては、その背後にあるコードを見ないと、フライウェイトの例にどのように適合するかわかりません。しかし、私が言えることは、リンク先のウィキペディアの記事のコーヒー ショップの例に似ているように見えます。番号は、その値が表すものは何でも、再利用されるオブジェクトに固有です。

設計パターンに関する 4 冊の本からなる元のギャングのコピーを入手するようにしてください。この本では、ワープロの例が非常に詳細に説明されており、パターンがどのように機能するかを理解するのに役立ちます.

于 2014-05-18T16:35:39.803 に答える