- 締切済み
Javaでタスクシステムを作るのは有効なのでしょうか?
どうもよろしくお願いします。 現在、携帯アプリでゲームを作るに当たって、タスクシステムでも作ろうかと思っています。 私は、C++で、タスクシステムを作った経験があります。 それで、今回の問題点なのですが、C/C++には、関数ポインタがありますが、Javaにはありませんよね? 携帯アプリ向けなので、Verctorクラスと、タスクのInterfaceでも 作れば、複数のタスクを管理することは出来そうです。 ですが、関数ポインタが無いので、タスクチェンジをどうすれば良いだろうか?と疑問に思っています。 タスクの状態変数を用意して、 switch文を使って、実行関数を処理分けすれば、いい話ですが、 これだと、せっかくのタスクシステムの恩恵があまり得られないような気がします。 メインループ内が、Verctor配列で、スッキリするだけでも意味はありますが、タスクチェンジもシンプルにしたいと思っています。 何か良い方法がありますでしょうか? よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- 11th_style
- ベストアンサー率50% (45/90)
javaで関数ポインタはインタフェースと実装クラスを使って表現します。この例ですと、タスクのInterfaceの実装クラスが関数ポインタを持っていればいいので、javaで実現するにはタスクのInterfaceの実装クラスが「関数ポインタを表すインタフェース」を格納できるフィールドを持っていればいいわけです。このフィールドには、関数のポインタの代わりに、「関数ポインタを表すインタフェースの実装クラスのインスタンス」、をセットします。 これは、デザインパターン的には、GoFのStrategyパターンになると思います。
- bgbg
- ベストアンサー率53% (94/175)
リフレクションを使えばできるのではないでしょうか。
お礼
bgbgさんも回答して頂きありがとうございます。 リフレクション、 確かに面白そうなクラスです。 ただ、残念ながら、携帯アプリ(DocomoとかSoftBankの)なので、 J2SEが、そのまま使えずに、そのサブセットである J2ME CLDCのクラスライブラリしか使えませんよね。 CLDCのリファレンスで調べてみると、java.lang.reflect は、どうやら無さそうです。 でも、J2SEを使える環境の時には、 リフレクションを使う選択肢もありそうです。 今回は、お付き合い頂きありがとうございます。 それでは、これにて失礼します。
お礼
11th_styleさん。こんにちは。 回答して頂きありがとうございます。 Strategyパターンですね。 参考になりました。 1.まず、関数ポインタを表すインターフェイスを定義する。 2.そして、それをインプリメントしたクラスの、メソッドとして 実行関数を定義するといったところでしょうか? 3.さらに、タスクを表すクラスの中で、 「関数ポインタを表すインタフェースの実装クラスのインスタンス」 を差し替えて、実行するんですね。 ありがとうございました。