戦略パターンに似たものを試してみるとよいでしょう。
基本的には、まずツールバーのルームボタンをクリックします。ツールバーが表示され、グリッドは「ルームプレース」のアクションリストを使用するよう指示します。あなたが部屋を構築する複数のステージを持っている場合はおそらくなど、
を、部屋の場所のActionListenerが今度は右/左クリックのためのロジックのすべての興味深いビットを実装し
を聞いていた以前のアクションリスナーを削除ドラッグ(例えば、ドアを置き、窓をつけてからドアをはずす)。アクションリスナーは、次の段階に制御を渡す責任があります:有限状態機械のビット。
「ルーム」ボタンをクリックして開始し、「プレイスルーム」リスナーが追加されました。ルームを配置するエリアをドラッグアウトします。「プレイスルーム」はゲームの状態を変更し、アクションリスナを「プレイスウィンドウ」のリスナに変更します。あなたが終わるまで、広告は無限になります。
1つの非常に簡単な(非コンパイル)例:あなたは、一般的にあなたのゲームモデルとグラフィックインターフェースを組み合わせることにしたくない:
class GridPanel extends JPanel
{
void SetMouseListener(MouseListener newListener)
{
for(MouseListener ml : getMouseListeners())
removeMouseListener(ml);
addMouseListener(newListener);
}
}
class ControlPanel extends JPanel
{
GridPanel gameGrid;
void OnRectangleButtonClicked(some stuff)
{
gameGrid.SetMouseListener(new PlaceRoomListener(gameGrid));
}
}
class PlaceRoomListener extends MouseAdapter
{
GridPanel gameGrid;
//constructor, etc
void OnClick(mouse event)
{
gameGrid.doCoolStuff();
gameGrid.SetMouseListener(new PlaceTrapDoorListener());
}
}
//etc
さて、余談非コンパイル例という、Pyrolisticalはポイントを持っていますクラスの1つのグロブ。モデルをGUIから切り離し、明確に定義されたインターフェースを通してモデルを操作する必要があります。
これは興味深いと思います。このpattenが実装されているすべての例に私をリンクできますか?それとも私がそれを見つけるのに十分一般的なのでしょうか? 私は最近、他のロジックのファクトリメソッドpattenをもう一つ表示しましたが、実際にはこの質問には関係しません。面白いことに、たくさんの確立された方法があります:) – Relequestual
http://ja.wikipedia.org/wiki/Strategy_patternしかし、それは基本的には「共通のインターフェースを実装して、異なることをする実装を入れ替えたり入れ替えることができる」ということです。ここでの私の使用は無効かもしれませんが、それは意図的に十分に近いと思います。 – CoderTao
ありがとう、これは面白いです。それはそれを行う方法かもしれません。前にアクションリスナーでやったことがありますか?あなたは推測していますか?私はこれがどのように実装されるのか考えようとしています。私はそれを動作させることができると思うが、私はむしろ眠っている:)。私は本質的には、ブーリアンを使って粗雑な方法でこれをやっていたと思うが、この戦略を使用すると、パタンはそれを行うためのはるかに良い方法のように見える。 – Relequestual