23

私が知る限り、オブジェクト プールは作成パターンであり、フライウェイトは構造パターンですが、実際には 2 つの間に大きな違いは見られません。誰かが私に違いと、それぞれが実装に役立つ時期を説明してもらえますか?

4

3 に答える 3

34

フライウェイトは一般に不変のインスタンスであるのに対し、プールから取得したリソースは通常変更可能であるという 1 つの違いがあります。

そのため、フライウェイトを作成して、同じ状態を含むオブジェクトの複数のインスタンスを繰り返し作成するコストを回避します (それらはすべて同じであるため、作成するのは 1 つだけで、アプリ内のすべての場所で再利用します)。プール内のリソースは特定のものです。個別に制御したいリソースで、状態が異なる可能性がありますが、それらはすべて同じ状態で初期化されるため、作成と破棄のコストを支払いたくありません。

于 2012-02-17T02:56:27.370 に答える
5

少なくとも 2 つの大きな違いが思い浮かびます。

  • 通常、フライウェイトがドメイン オブジェクトであるのに対し、オブジェクト プールは一連のドメイン オブジェクトコンテナーです
  • 通常、オブジェクト プールには、データベース接続など、同時に共有できる同様のオブジェクトのセットが含まれますが、通常は、それぞれが異なる状態を表す異なる flyweight オブジェクトのセットがあります。
于 2012-02-17T03:07:22.963 に答える
1

このサイトでは、特定の例を使用して両方のパターンについて説明しています。それは違いを明確にするかなり良い仕事をし、上記のガブリエルの応答をサポートします. http://www.oodesign.com/

于 2012-02-17T03:07:56.250 に答える