0

私は小さなRPGゲームを作成しており、オブジェクト間のイベント駆動型通信のための一種のオブザーバーデザインパターンを実装しました。リスナーを登録し、新しいイベントを受け入れ、イベントをディスパッチするEventManagerがあります。問題は、イベントを送受信する必要があるすべてのオブジェクトが、addEvent()またはregister()を呼び出すためにEventManagerのインスタンスを必要とすることです。私のプログラムのほとんどすべてのオブジェクトがこのシステムを使用しているので(結合を減らし、データ変更エラーを回避するために)、それにアクセスするための良い方法が必要です。

現在、コンストラクターとメソッド内の多数のオブジェクトへの参照を明示的に渡していますが、スケールが大きくなるにつれて、これは厄介になります。特に、キャラクターのようなオブジェクトでそれが必要になり始めており、キャラクターはゲーム内で構築されていないためです。それらはデータファイルから逆シリアル化されます。

グローバル変数は一般的に悪い設計であることを私は知っていますが、これらは私が見ることができるオプションであり、それらはすべて批判されています:

a)EventManagerのすべてのフィールドとメソッドを静的にする

b)シングルトンデザインを採用する

c)パブリック静的EventManagerを作成します

何か案は?ありがとう

4

3 に答える 3

2

実際、あなたが現在行っていることはベストプラクティスです。依存性注入は、モジュール性だけでなくテストにも重要です。ファクトリを使用すると、パラメーターを渡す負担を軽減できます。

グローバル変数を使用する場合 (使用すべきではありません)、Java でそれを行う方法は、一部のクラスの static public フィールドです。

于 2012-08-09T00:20:11.100 に答える
0

依存性注入フレームワーク(Google Guice)は、大規模なアプリケーション間で参照を管理するための優れた方法を提供します。これには、アプリケーションを変更できることに加えて、オブジェクトへの参照を取得する方法よりも、オブジェクトの使用方法に集中できるという利点があります(たとえば、2人のイベントマネージャーまたは各プレーヤーに1人が必要です)。 )関連するエクスポートモジュールを更新するだけです。

また、クラスを依存関係から切り離すことで、単体テストを簡単に行うことができます(シングルトンイベントマネージャーを使用している場合、オブジェクト階層全体を構築せずに 、モックフレームワークを使用して各クラスをテストするのははるかに困難です。

于 2012-08-09T01:52:52.667 に答える