5

私はデザインパターンを学び始めます。プロトタイプは私がすでに持っているオブジェクトの正確なコピーを作成するためのものであり、Flyweight は同様のオブジェクトを作成するためのものであることを理解しています。

マリオのような 2D プラットフォーマー ゲームを (Java で) プログラミングしました。位置が違うだけで同じ敵がたくさんい[x,y]ます。膨大な数の長方形から構築された壁もあり、ここでも唯一の違いはそれらの位置[x,y]です。

この特定の状況でこれらの設計パターンのいくつかを使用するのは賢明でしょうか? プロトタイプを使用して cloneable を介してオブジェクトを複製し、次に set を使用する必要があります[x,y]か?

flyweight を使用する方が良いですか? 新しいオブジェクトが必要な場合は、ハッシュマップからそれらを返し、[x,y] を設定するだけですか?

どちらのシナリオでも、新しい演算子の使用は避けていますが、どちらを使用すればよいかわかりません。

4

2 に答える 2

7

あなたはそれを少し間違っています。Prototype新しいインスタンスを作成するためにFlyweight使用され、インスタンスの共有を許可するために使用されます。

最良の例ではありませんが、ゲームに関しては、1 つ(または複数) あり、そこから新しい敵を作成するPrototypeことを意味します。EnemyPrototype単純な実装では、グラフィックを含むすべてのデータが複製されます。したがって、敵が 100 人の場合、同じ画像が 100 回メモリ内に存在することになります (良いことではありません)。

に関してはFlyweight、グラフィックを共有します。そのようなパターンを必要とせずに簡単に解決できるため、パターンのあまり良い例ではありませんFlyweight(マップやファクトリなどから画像への参照を取得するだけです)。

オペレーターを避けることに関しては、new必要ありません。clone()overを使用する利点はありませんnewが、いくつかの欠点があります。

于 2015-08-22T07:39:53.367 に答える