2012-03-08 7 views
-1

私がやりたいことに対して適切なパターンを見つけるのに苦労します。ユーザーのメンバーにアクセスする戦略パターン

私は2つのゲームモードを持つブロックゲームを持っています。 1つのモードでは、削除されたブロックはすべて、画面上部からドロップされた新しいブロックに置き換えられます。他のモードでは、削除されたブロックは、下から上に向かって上がっているブロックの完全な新しい行に置き換えられ、フィールド全体が上に移動します。だから私はこれを実装するために戦略パターンを使用することが最善であると思った。

この戦略では、競技場の既存のブロックのすべての位置へのアクセスを変更する必要がありますが、その情報は戦略のユーザークラス(Gameクラス)内にあることは明らかです。依存関係。

フィールド全体を参照として渡すことができましたが、ブロック生成コードがGameクラス内にあるという追加の問題があります。だから、念頭に置く唯一のことは、これらすべてのメソッドを関数参照として渡すことですが、私には過剰なように思えます。

これを解決する方法はありますか?たぶん私は戦略パターンを使いたいと思って間違った道を歩いています。ヘルプは非常に高く評価されます。

ユーザークラスのメンバーに依存する同じメソッドにアクセスする必要があるクラス内の2つの戦略パターンオブジェクトの使用に関するヒント。

それは私が最終的に、一種のアウトオブボックスの答えを想定するにはあまりにも複雑だったと思い助け

+0

デカップリングは常に始めるのが良いポイントです。インターフェース/リスナーはどうですか?私はボンバーマンのリメイクでいくつかの疑わしい問題に直面しています。できるだけ抽象的にプログラムを試してください。それは私に多くの時間を与えました。 –

+0

まず、Javaで「関数参照」を渡すことはできません。これを回避するには、ある種の関数オブジェクトを作成する必要があります。あなたが使用できる別のパターンはテンプレートです。いずれにしても、他のオブジェクトへの参照を使用するために参照を渡すことが困難であるとは限りません。 –

答えて

0

である場合、私はJavaでコーディングしています。

私は、他のオブジェクトへの参照を実際に渡すために、ミスター・スミスの示唆と一緒にデカップリングするというヒントを追っています。

私の最終的な解決策は、FieldManager、FieldおよびStrategyクラスを持つことです。 FieldManagerには、FieldインスタンスとStrategyインスタンスが含まれています。 Fieldクラスには、ブロック作成コードが含まれています。

ブロックを作成または削除する必要があるときはいつでも、適切な関数が対応する戦略の関数を呼び出し、参照をフィールドに渡します。したがって、戦略がフィールド内で何かを作成または削除する必要があるときはいつでも、それはフィールドオブジェクトを介して行うことができます。

関連する問題