2012-02-17 22 views
19

私が知る限り、オブジェクトプールは創造的なパターンであり、フライウェイトは構造的なパターンですが、実際にはその2つのパターンの間に非常に大きな違いがあります。誰かが私にその違いを説明してください。実装に役立つ?プールから取得したリソースは、通常は変更可能ですしながら、そのフライウェイトでFlyweightとObject Poolのパターン:それぞれ便利なのはいつですか?

答えて

26

1つの違いは、一般的に不変のインスタンスです。

フライウェイトを作成すると、同じ状態を含むオブジェクトの複数のインスタンスが繰り返し作成されるのを避けることができます(すべて同じであるため、アプリケーションのすべての場所で1つだけ作成して再利用します)。プールは個別に制御したい場合や異なる状態を持つ特定のリソースですが、同じ状態ですべて初期化されているため、作成および破棄のコストを支払う必要はありません。

+1

ベストセラー!フライウェイトは通常、ユニークなアイテムだけを含んでいるため、メモリ量を最小限に抑えるために使用されています。オブジェクトプールはパフォーマンスを向上させますが、高いメモリ消費量をもたらします。 – Warlock

+1

ある程度拡張すると、私はフライウェイトパターンも何かをキャッシュすると思います。単一の不変のフライウェイトがあまりにも多くのメモリを占める場合、メモリ節約を言うのは難しいです。これらの不変オブジェクトを1回作成して作成するよりも優れていると言うことができます。 – Chao

5

少なくとも2つの大きな違いが頭に浮かぶ:

  • 通常フライ級はドメインオブジェクトである一方、オブジェクトプールは、ドメインオブジェクトのセットのためのコンテナです。
  • それぞれが異なる状態を表す異なるフライオブジェクトのセットは、通常ありながらオブジェクトプールは、通常、そのようなデータベース接続として同時に共有することができる類似のオブジェクトのセットを含みます。
1

このサイトでは、具体例を挙げて両方のパターンを説明しています。違いを明確にし、上記のGabrielの反応をサポートしています。 http://www.oodesign.com/

関連する問題